我试图准确理解如何使用Phusion Passenger处理对rails应用程序的请求。我已经阅读了Passenger文档(在这里找到:http://www.modrails.com/documentation/Architectural%20overview.html#_phusion_passenger_architecture),我理解他们如何在内存中维护rails框架和应用程序代码的副本,这样每个对应用程序的请求都不会因为旋转而陷入困境你的申请的另一个例子。我不明白的是这些单独的应用程序实例如何在我的linux机器上共享原生ruby进程。我一直在做一些研究,这就是我认为正在发生的事情:
一个请求命中Web服务器,该服务器调度Passenger以在Passenger的一个空闲工作进程上完成请求。另一个请求几乎同时发生,并由另一个闲置的乘客工作流程处理。
此时正在执行两个请求,这两个请求由两个不同的乘客工作进程管理。 Passenger在Linux的本机Ruby线程上为每个工作进程创建一个绿色线程。使用上下文切换执行每个绿色线程,以便对一个Passenger工作进程的阻塞操作不会阻止执行其他工作进程。
我是在正确的轨道上吗?
感谢您的帮助!
答案 0 :(得分:2)
应用程序实例不“共享本机Ruby进程”。应用程序实例是 Ruby进程(或Node.js进程,或Python进程,具体取决于您的应用程序所使用的语言),也与“乘客工作进程”相同。它也与线程无关。