关于优化windows版本emacs的进展(2024-6-16更新,绕过了子进程/套接字数量限制)

轻量用了几天,没发现 too may open files了,感觉win版本的反应速度也还行,除了被git速度影响的magit……

找了一下,应该是这个 bug#71628: sys_select and waitpid optimize in windows emacs (gnu.org)

目前似乎还没有合并…

有人跟我联系了几次,提交了一些信息,后续我也不知道还要怎么弄 :rofl:

等 FSF 签完了应该就能合了 :innocent:

1 个赞

不会是纸质的吧? :thinking:

1 个赞

电子的就行,只是 FSF 文员效率不高,如果一周以后没有回复发邮件催一下并 cc 给 Eli

1 个赞

它会发个 PDF 给你, 然后你去把它打印下来, 在上面签署你的名字, 然后把扫描件发回去就好了

2 个赞

恭喜啊,要成了 :+1: 这是自己模拟的多线程绕开限制?

1 个赞

不是,就动了个 #define 定义的常量,再手动对调用厡来 API 的地方做了个调度

2 个赞

额,就是另外模拟的api呀,只改宏定义没用 Comparing master...new_sys_select_for_win · heheda123123/emacs · GitHub

1 个赞

是的,可以看我发的对比链接

1 个赞

应该就是 Windows 官方文档里的推荐用法吧,说不上摸拟

To wait on more than MAXIMUM_WAIT_OBJECTS handles, use one of the following methods:

  • Create a thread to wait on MAXIMUM_WAIT_OBJECTS handles, then wait on that thread plus the other handles. Use this technique to break the handles into groups of MAXIMUM_WAIT_OBJECTS.
2 个赞

看了下文档,似乎 Win32 的线程池也可以用,不用它是因为 Emacs 之前的代码改起来比较麻烦吗。

1 主要原因是上面oldfans提到的,改的代码需要能支持9x :rofl:
2 另外我自己改了一版用线程池的,没啥提升,因为比如启动100个子进程(包括套接字等),会增加一百多个线程,这里面只有几个线程是用于这里监控事件的,而其中有100个线程是直接跟子进程相关的,每启动一个子进程就会多一个线程,这个要动就要大改代码

3 个赞

还有后续吗,合并到emasc了没

没后续,感兴趣的直接拿我的代码去合吧,流程太麻烦了 :rofl: