我的单线程Rails应用程序如何处理并发请求?

Joh*_*hir 5 ruby concurrency rack ruby-on-rails heroku

我在Heroku Cedar上以单线程模式运行单线程Rails应用程序.

当我做一个超过一分钟的巨大POST请求(文件上传)时,我可以同时执行其他GET请求.

Heroku支持向我保证他们的路由层不存储请求然后立即发送它(这是许多代理的行为,例如nginx).他们坚持认为我的应用正在处理并发请求.

这里发生了什么?

Ser*_*sev 6

Thin构建在EventMachine之上,EventMachine提供基于事件的IO.

这意味着Thin会同时接收您的POST请求,同时提供GET请求.上传POST数据后,Thin会继续将其传递给Rails(同步处理它并阻止其他请求直到完成).