据我了解,mri 中的非阻塞 io 使 GIL 释放锁。在em中,根据这篇文章: http: //www.paperplanes.de/2011/4/25/eventmachine-how-does-it-work.html,非阻塞是根据系统调用来实现的,如select
,、、。有没有办法在纯红宝石中进行非阻塞(这意味着,当我在等待某些东西时,其他线程正在启动)?epoll
kqueue
问问题
398 次
1 回答
1
GIL 与 EM 无关,因为一切都发生在同一个线程中(EM.defer 块除外)
您可以使用纯 ruby 中的非阻塞代码,最好的方法是查看 EM 反应器的纯 ruby 实现:https ://github.com/eventmachine/eventmachine/blob/master/lib/em /pure_ruby.rb
于 2013-12-06T09:08:49.023 回答