前情提要: 关于优化windows版本emacs的进展(2024-6-16更新,绕过了子进程/套接字数量限制)
春节用了几天在 @junmoxiao 代码的基础上做了一些改进,主要是:
- 在等待时间为 0 时进行忙等待
- 实现了一个简单的线程池,而不是每次调用 sys_select 时创建新的等待线程
我在自己的 Windows 机器上编译之后用了两三天,时不时创建几百个仅仅睡眠的线程,似乎没有什么问题,至少 Emacs 没有崩溃过。
Re: Increase FD_SETSIZE in w32.h to allow more than 32 (actually 29) sub
在 Windows 上使用 Emacs 的同学可以试试这个 patch,虽然日常使用很少用到过超出 32 个子进程的情况就是了。感兴趣的同学也可以试试我的测试代码然后贴下测试用时: w32-pool-test.c,它会输出等待两千多个对象时的等待用时,在我的六核心十二线程的 7600hs 上大概是 100~150 微秒。更多核心的 CPU 等待时间应该会更短。
如果设置测试代码的 test_time_2
为非 0 值,那么它会输出等待时间个数与等待用时的数据,可以用 Excel 看看散点图。