Active Job事件驱动了吗?

时间:2016-09-02 22:56:49

标签: ruby-on-rails

我正在阅读active job的导轨指南。它说明了以下内容(强调添加了粗体):

  

要在生产中排队和执行作业,您需要设置一个   排队后端,也就是说你需要决定第三方   Rails应该使用的排队库。 Rails本身只提供一个   进程中排队系统,仅将作业保留在RAM中。如果   进程崩溃或机器重置,然后所有未完成的工作   使用默认的异步后端丢失。

如果我决定不使用第三方队列库,例如Sidekiq,Active Job将在Rails进程本身内运行(因此,在进程中)。因此,在该过程中仍然会有一个队列来处理作业。当然,使用Rails环境的默认配置,此队列不是多线程队列。它不是多进程,因为它在进程中运行。它不是多线程的,因为Rails应用程序通常在每个进程的单线程上运行。然后它必须是阻塞(这会破坏作业队列的整个目的),或者它正在使用事件,如epoll。

因此,我的问题。 Active Job是否默认使用事件队列,如epoll?

1 个答案:

答案 0 :(得分:0)

它使用进程内线程池:

  

Active Job的默认行为是通过:async执行作业   适配器。因此,您现在可以使用deliver_later发送电子邮件   异步。 Active Job的默认适配器运行带有的作业   进程内线程池。它非常适合开发/测试   环境,因为它不需要任何外部基础设施,   但它不适合生产,因为它会减少待完成的工作   重新开始。如果您需要持久的后端,则需要使用   具有持久后端的活动作业适配器(Sidekiq,Resque,   等)。