【问题标题】:Is Thin concurrent if used with Rails / ActiveRecord?如果与 Rails / ActiveRecord 一起使用,Thin 是否是并发的?
【发布时间】:2016-02-06 10:29:37
【问题描述】:

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

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

Thin 正在使用 EventMachine 来处理 Rack 请求。因此,按照设计,它将能够与一个 ruby​​ 进程并行处理多个请求。不幸的是,虽然 Thin 文档的功能足以让您在几分钟的工作中运行服务器,但内部工作却相当安静。

我是否正确假设一旦我使用 Rails 运行 Thin,所有关于“并发”的讨论都没有实际意义? ActiveRecord、数据库驱动程序、模板处理等可能没有启用 EM,不使用 Fibers 等,因此无论如何都会阻塞单个进程,同时在 DB-heavy 中使用大部分服务器端处理时间应用程序。

我所有的研究似乎都得出了这个结论;不幸的是,瘦网站/文档对此只字未提。坦率地说,我很困惑“并发”这个词怎么会出现在这里......

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

谢谢!

【问题讨论】:

    标签: ruby-on-rails activerecord concurrency thin eventmachine


    【解决方案1】:

    你是对的,当与 Rails 一起使用时,它不会是并发的。任何对 db 驱动程序/文件系统的调用都会阻塞整个 ruby​​ 解释器。它可能在 Rails 5 中进行了部分更改,但现在您只需要运行大量工作进程即可。

    【讨论】:

    • 感谢您证实我的怀疑。
    猜你喜欢
    • 1970-01-01
    • 2012-05-18
    • 1970-01-01
    • 2012-02-19
    • 2013-11-08
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 2014-07-23
    相关资源
    最近更新 更多