Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何检查Rails应用程序';美洲豹的螺纹安全_Ruby On Rails_Ruby_Multithreading_Heroku_Puma - Fatal编程技术网

Ruby on rails 如何检查Rails应用程序';美洲豹的螺纹安全

Ruby on rails 如何检查Rails应用程序';美洲豹的螺纹安全,ruby-on-rails,ruby,multithreading,heroku,puma,Ruby On Rails,Ruby,Multithreading,Heroku,Puma,我希望使用Puma Web服务器将我的Rails应用程序部署到Heroku。然而,我并不确定是否所有的宝石都是线程安全的。阅读所有Gems的源代码对我们来说是不可行的 有没有办法自动检查所有gem的线程安全性?或者,如果执行/检测到线程不安全代码,Puma是否会投诉/显示特定的错误日志?通常无法检测到线程安全。如果有某种方法可以自动检测它,那么您的编译器/解释器可能会警告您。 不能被自动系统检测到,它们甚至很难复制 根据您的口译员: CRubyhas,因此对其使用Puma是毫无意义的 如果您使

我希望使用Puma Web服务器将我的Rails应用程序部署到Heroku。然而,我并不确定是否所有的宝石都是线程安全的。阅读所有Gems的源代码对我们来说是不可行的


有没有办法自动检查所有gem的线程安全性?或者,如果执行/检测到线程不安全代码,Puma是否会投诉/显示特定的错误日志?

通常无法检测到线程安全。如果有某种方法可以自动检测它,那么您的编译器/解释器可能会警告您。 不能被自动系统检测到,它们甚至很难复制

根据您的口译员:

  • CRuby
    has,因此对其使用
    Puma
    是毫无意义的
  • 如果您使用的是
    JRuby
    Rubinius
    ,那么您可能会从
    Puma
    中获益,而且您使用的gems很可能已经记录了它们的方法/类线程安全性。在这种情况下,您只需检查代码

精彩文章:即使使用GIL,使用多线程也有其优势。当然,您不能同时使用1个以上的CPU运行程序,但是在网络或IO之后花费的所有等待时间通常都可以用于在同一进程中执行其他操作。另外,您最终将使用更少的内存。例如,参见Sidekiq。我仍在为
MRI Ruby
Running
Puma
MRI Ruby
Running
Unicorn
搜索最新的基准测试。如果你能展示一些东西,我会同意,但在此之前,我认为这只是一个猜测。当然,你说的所有事情在理论上都是正确的,但在实践中,特别是在谈到并行执行时,情况变得非常不同。Unicorn作为一种琐碎的DoS,容易受到慢客户端攻击,这是一个问题,而且可能仍然存在。这就是为什么Heroku现在建议使用Puma而不是Unicorn作为Ruby web服务器的原因。@art solopov它可以在某些情况下提供部分帮助,但专用攻击可以绕过nginx的缓冲区大小,并挂起Unicorn。我已经阅读了技术背景,但现在找不到链接。ruby中的FWIW线程安全性充其量是不确定的。这是何塞创造长生不老药的原因之一。在任何ruby代码中,我都不会指望线程安全。你最好的选择是使用rubinius或jruby