Phusion乘客中的多个请求是否在自己的线程中运行?

时间:2013-09-06 01:15:42

标签: ruby passenger

我有一个使用Phusion passenger + Apache Web服务器部署的Ruby on Rails应用程序。每个请求是否都由Phusion Passenger生成的自己的线程运行?

2 个答案:

答案 0 :(得分:6)

Passenger(以及大多数其他应用程序服务器)每个线程运行的请求不超过一个。通常,每个进程也只有一个线程。来自Phusion Passenger docs

  

Phusion Passenger支持两种并发模型:

     
      
  • 进程:单线程,多处理I / O并发。 每个应用程序进程只有一个线程,一次只能处理1个请求。这是Ruby应用程序传统上使用的并发模型。它具有出色的兼容性(可以与不是设计为线程安全的应用程序一起使用)但是不适合的工作负载,其中应用程序必须等待大量外部I / O(例如HTTP API调用),并且因为使用更多内存,因为每个进程都有很大的内存开销。

  •   
  • 线程:多线程,多处理I / O并发。每个应用程序进程都有多个线程(可通过PassengerThreadCount自定义)。此模型提供了更好的I / O并发性并使用更少的内存,因为线程在同一进程内彼此共享内存。但是,如果应用程序的设计不是线程安全的,则使用此模型可能会导致兼容性问题。

  •   

(强调我自己)

答案 1 :(得分:0)

Passenger开源版仅为每个应用程序使用一个线程,如apache虚拟主机文件中所列(不确定nginx)。因此,您可以想象您的应用程序的多个实例在同一个apache服务器上运行,但您必须将应用程序安装到多个目录中并指向它们的vhosts条目,并在其前面放置某种负载均衡器。 乘客企业可以更好地控制并发。

编辑:清晰度。