2

每个人总是明确提到 next_tick 将在主线程中执行。但是定时器和回调/错误返回呢?它们是否也保证在主线程中运行?

4

2 回答 2

1

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

定时器、回调和 errbacks 保证在反应器(主)线程中运行

于 2013-12-06T09:23:34.653 回答
0

假设您使用的是 MRI Ruby,那么只有 1 个“真实/原生”线程,即主/反应器线程,所有代码都由该反应器线程执行。所有计时器和回调都将在反应器线程上被拾取。

Eventmachine 并非旨在将多个线程用作其标准操作的一部分,但是,Eventmachine 确实有一个 'EM::defer' 方法,它将在不同的 'ruby' 线程上执行该块,我相信如果你正在运行支持多线程的 ruby​​,例如 jruby 或 rubinious,那么它将在“本机”操作系统线程上运行。如果您要执行任何“阻塞”代码,则应使用“延迟”。

于 2013-10-08T09:00:29.453 回答