EventMachine:定时器和回调是否在主线程中运行?

时间:2013-10-05 06:24:03

标签: ruby eventmachine

每个人都明确提到next_tick将在主线程中执行。 但是Timers和callbacks / errbacks呢?他们保证也可以在主线程中运行吗?

2 个答案:

答案 0 :(得分:1)

无论Ruby版本如何,EM都会运行除反应器线程内的EM.defer代码块之外的所有内容(EM.defer结果和错误块也在反应器中),所以是的,

定时器,回调和errbacks保证在reactor(主)线程中运行

答案 1 :(得分:0)

假设您正在使用MRI Ruby,那么只有1个“真实/本机”线程,它是主/反应器线程,所有代码都由此反应器线程执行。所有计时器和回调都将在reactor线程上获取。

Eventmachine不是设计为使用多个线程作为其标准操作的一部分,但是,Eventmachine确实有一个'EM :: defer'方法,它将在不同的'ruby'线程上执行块,我相信如果你正在运行一个多线程的ruby,如jruby或rubinious,然后这将在一个'本机'操作系统线程上运行。如果您要执行任何“阻止”代码,则应使用“延迟”。