2

据我了解,mri 中的非阻塞 io 使 GIL 释放锁。在em中,根据这篇文章: http: //www.paperplanes.de/2011/4/25/eventmachine-how-does-it-work.html,非阻塞是根据系统调用来实现的,如select,、、。有没有办法在纯红宝石中进行非阻塞(这意味着,当我在等待某些东西时,其他线程正在启​​动)?epollkqueue

4

1 回答 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 回答