代码贡献应该发至 [email protected],谢谢
轻量用了几天,没发现 too may open files了,感觉win版本的反应速度也还行,除了被git速度影响的magit……
有人跟我联系了几次,提交了一些信息,后续我也不知道还要怎么弄
等 FSF 签完了应该就能合了
不会是纸质的吧?
电子的就行,只是 FSF 文员效率不高,如果一周以后没有回复发邮件催一下并 cc 给 Eli
它会发个 PDF 给你, 然后你去把它打印下来, 在上面签署你的名字, 然后把扫描件发回去就好了
恭喜啊,要成了 这是自己模拟的多线程绕开限制?
不是,就动了个 #define
定义的常量,再手动对调用厡来 API 的地方做了个调度
是的,可以看我发的对比链接
应该就是 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.
看了下文档,似乎 Win32 的线程池也可以用,不用它是因为 Emacs 之前的代码改起来比较麻烦吗。
1 主要原因是上面oldfans提到的,改的代码需要能支持9x
2 另外我自己改了一版用线程池的,没啥提升,因为比如启动100个子进程(包括套接字等),会增加一百多个线程,这里面只有几个线程是用于这里监控事件的,而其中有100个线程是直接跟子进程相关的,每启动一个子进程就会多一个线程,这个要动就要大改代码
没后续,感兴趣的直接拿我的代码去合吧,流程太麻烦了
改了一下,现在用了个非常“青春版”的线程池,去掉了所有的 malloc。
线程只会在需要的时候被创建,而且创建后不会销毁,而是在需要的时候复用。
明天写个总结。
要在 Windows 上使用这个 patch 的话,下载 gist 压缩包或者直接文本复制保存之后(记得是 LF 换行),然后 git apply 或者 Magit 打上再编译就行了。
(defun create-ping-process (index)
"Create a ping process for a given INDEX."
(let ((process-name (format "ping-process-%d" index))
(buffer-name (format "*ping-output-%d*" index))
(host "127.0.0.1"))
(start-process process-name
buffer-name
"ping" host)))
(defun create-multiple-ping-processes (count)
"Create COUNT ping processes."
(dotimes (i count)
(create-ping-process i)))
(create-multiple-ping-processes 200)
只能创建 1021 而不是 1024 个子进程和改之前只能创建 29 个而不是 32 个一样。
(考虑到 select 最多支持 1024 ,我这里也就限制到 1024 了)
对magit有提升吗
对性能没有任何提升,只是为了让 Emacs 能够开更多子进程(缓解下子进程数量限制焦虑而已)
如果同一时间启动大量子进程(比如一两百个,但是我想象不到一个编辑器什么时候会用到这么多),你的鼠标基本上动不了了。真要“高并发”还得用点现代的东西。
等会测下现在 Emacs 当服务器能接受多少个连接去,不过也许这个和“子进程”数量没有太大关系
具体讨论见: Re: Increase FD_SETSIZE in w32.h to allow more than 32 (actually 29) sub