每个人都明确提到next_tick将在主线程中执行。 但是Timers和callbacks / errbacks呢?他们保证也可以在主线程中运行吗?
答案 0 :(得分:1)
无论Ruby版本如何,EM都会运行除反应器线程内的EM.defer代码块之外的所有内容(EM.defer结果和错误块也在反应器中),所以是的,
定时器,回调和errbacks保证在reactor(主)线程中运行
答案 1 :(得分:0)
假设您正在使用MRI Ruby,那么只有1个“真实/本机”线程,它是主/反应器线程,所有代码都由此反应器线程执行。所有计时器和回调都将在reactor线程上获取。
Eventmachine不是设计为使用多个线程作为其标准操作的一部分,但是,Eventmachine确实有一个'EM :: defer'方法,它将在不同的'ruby'线程上执行块,我相信如果你正在运行一个多线程的ruby,如jruby或rubinious,然后这将在一个'本机'操作系统线程上运行。如果您要执行任何“阻止”代码,则应使用“延迟”。