如果与 Rails / ActiveRecord 一起使用,Thin 是否并发?

Is Thin concurrent if used with Rails / ActiveRecord?

我们的 Rails 4 应用程序 运行 正在 thin -s 16 ... 多进程服务器中使用 Apache 作为前端,其反向代理处理内部请求。一切正常,性能对我们的用户数量来说还可以。

因为一切都是开箱即用的,所以我并没有真正关心 Thin 的实际工作原理。不过,我最近确实偶然发现了所有 Fibers 和 EventMachine 的优点,并阅读了很多关于它的内容。

Thin 使用 EventMachine 来处理 Rack 请求。因此,根据设计,它可以通过一个 ruby 进程并行处理多个请求。不幸的是,虽然 Thin 文档的功能足以使您能够 运行 服务器在几分钟的工作中完成,但它对内部工作相当安静。

我是否正确地假设所有关于 "concurrency" 的讨论都没有实际意义,因为我 运行 瘦了 Rails? ActiveRecord、DB 驱动程序、模板处理等可能未启用 EM,未使用 Fibers 等,因此无论如何都会阻塞单个进程,同时在 DB-heavy 中使用大部分服务器端处理时间应用程序。

我所有的研究似乎都得出了这个结论;不幸的是,Thin website/docs 对此只字未提。坦率地说,我很困惑 "concurrent" 这个词是怎么出现在这里的……

有人可以帮我解决这个问题吗?我是否遗漏了一些基本信息,或者 "concurrency" 在 http://code.macournoyer.com/thin/ 上吹捧是指不使用 Rails 或其他 "heavy" 中间件的手动制作的机架服务器?

谢谢!

你说的对,with Rails 是不会并发的。任何对 db 驱动程序/文件系统的调用都会阻塞整个 ruby 解释器。它可能会在 Rails 5 中进行部分更改,但现在您只需要 运行 很多工作进程。