相关疑难解决方法(0)

如何部署线程安全的异步Rails应用程序?

我已经在网上阅读了大量关于不同版本的ruby和rails中的线程安全性和性能的材料,我想我现在对这些事情了解得很清楚.

讨论中似乎奇怪的是如何实际部署异步Rails应用程序.在谈论应用程序中的线程和同步时,人们想要优化两件事:

  1. 利用所有CPU内核,最小化RAM使用率
  2. 能够在先前的请求等待IO时提供新请求

第1点是人们(正确地)对JRuby感到兴奋的地方.对于这个问题,我只想优化第2点.

说这是我的应用程序中唯一的控制器:

TheController < ActionController::Base
  def fast
    render :text => "hello"
  end

  def slow
    render :text => User.count.to_s
  end
end
Run Code Online (Sandbox Code Playgroud)

fast没有IO,每秒可以服务数百或数千个请求,并且slow必须通过网络发送请求,等待工作完成,然后通过网络接收答案,因此要慢得多fast.

因此,理想的部署将允许在请求等待IO时fast满足数百个请求slow.

围绕Web的讨论似乎缺少的是堆栈的哪一层负责实现这种并发.thin有一个--threaded标志,它将"在线程中调用机架应用程序[实验]" - 是否为每个传入请求启动一个新线程?在持久存在并等待传入​​请求的线程中假装机架应用程序实例?

瘦是唯一的方式还是其他人?ruby运行时是否对优化第2点很重要?

ruby multithreading rack ruby-on-rails thin

8
推荐指数
1
解决办法
2170
查看次数

标签 统计

multithreading ×1

rack ×1

ruby ×1

ruby-on-rails ×1

thin ×1