我正在阅读active job的导轨指南。它说明了以下内容(强调添加了粗体):
要在生产中排队和执行作业,您需要设置一个 排队后端,也就是说你需要决定第三方 Rails应该使用的排队库。 Rails本身只提供一个 进程中排队系统,仅将作业保留在RAM中。如果 进程崩溃或机器重置,然后所有未完成的工作 使用默认的异步后端丢失。
如果我决定不使用第三方队列库,例如Sidekiq,Active Job将在Rails进程本身内运行(因此,在进程中)。因此,在该过程中仍然会有一个队列来处理作业。当然,使用Rails环境的默认配置,此队列不是多线程队列。它不是多进程,因为它在进程中运行。它不是多线程的,因为Rails应用程序通常在每个进程的单线程上运行。然后它必须是阻塞(这会破坏作业队列的整个目的),或者它正在使用事件,如epoll。
因此,我的问题。 Active Job是否默认使用事件队列,如epoll?
答案 0 :(得分:0)
它使用进程内线程池:
Active Job的默认行为是通过:async执行作业 适配器。因此,您现在可以使用deliver_later发送电子邮件 异步。 Active Job的默认适配器运行带有的作业 进程内线程池。它非常适合开发/测试 环境,因为它不需要任何外部基础设施, 但它不适合生产,因为它会减少待完成的工作 重新开始。如果您需要持久的后端,则需要使用 具有持久后端的活动作业适配器(Sidekiq,Resque, 等)。