MRIとJRubyの観点から、マルチスレッドに頭を悩ませようとしています。私は簡単なシナトラアプリをやりました:
require 'sinatra'
get '/long' do
sleep(10)
"Long operation finished"
end
get '/other' do
"Time now is #{Time.now}"
end
これをruby1.9.3で実行すると、呼び出されruby app.rb
たとき/long
に他のリクエストを完了できないと予想していました。しかし、完了を待っている/other
ときでも、別のブラウザで呼び出すことができることがわかりました。/long
そして、私はここで立ち往生しています。これはJRuby(たとえば、トリニダードでアプリを実行する場合)には当てはまるはずですが、MRIには当てはまらないと思いました。そのように機能させるには、いくつかのインスタンスを生成する必要があると思いました。
誰かが私が間違っているところを説明してもらえますか?長時間実行されている1つのブロックであっても、他の要求から応答を取得できるのはなぜですか?