一个进程中有多个Ruby EventMachines:可能吗?

Mat*_*att 7 ruby eventmachine

我有一种情况,我想在Ruby中运行多个EventMachines - 有没有人有这方面的经验?(如果没有,我可以自己写一个测试用例.请继续关注).

让我们明确一点:我想自己实例化两个线程,并调用EventMachine.run两个线程,所以我真的有两个反应器循环.

原因是我正在使用AMQP gem编写异步消息总线,它使用EventMachine.这很好,但我想把它作为一个单独的模块化组件,可以在两个应用程序中使用:

  • 一个有自己的阻塞gui循环(无法通过调用来自EventMachine的tick来模拟 - 它真的阻塞,它在C库中执行,所以我不能破解它).这个很简单 - 只需在自己的线程中启动EM,并以线程安全的方式在循环之间共享传入的消息;
  • 和另一个本身在一个反应​​器循环中运行的应用程序,我可以与AMQP代码共享(这对于线程安全问题很好 - 尽管我必须为上述应用程序解决它们).这是让我思考的问题......我可以通过运行两个独立的EventMachines与上述应用程序共享消息总线代码吗?

有人有想法吗?

Mat*_*att 7

好的,深入了解EM的文档,我看到EventMachine.run的正文从这开始:

240:     if reactor_running?
241:       (b = blk || block) and b.call # next_tick(b)
242:     else
         ... start the reactor ...
Run Code Online (Sandbox Code Playgroud)

这太棒了.看起来,如果你在多个线程中执行EventMachine.run,它将调度第二台机器的定义 - 传递给"run"的块 - 在已经运行的reactor上.

我喜欢这个图书馆.