从 MRI 与 JRuby 的角度来看,我正试图围绕多线程进行思考。我已经完成了简单的 sinatra 应用程序:
require 'sinatra'
get '/long' do
sleep(10)
"Long operation finished"
end
get '/other' do
"Time now is #{Time.now}"
end
通过我在 ruby 1.9.3 上运行它,ruby app.rb
我期望当/long
被调用时我将无法完成任何其他请求。但事实证明,/other
即使在/long
等待完成时,我也可以在不同的浏览器中调用。
我被困在这里。我认为这应该适用于 JRuby(当应用程序在特立尼达上运行时),但不适用于 MRI。我想我必须生成几个实例才能让它以这种方式工作。
有人可以解释我哪里错了吗?为什么即使长时间运行一个阻塞,我仍然可以得到其他请求的响应?