各リクエストを 30 秒間フリーズする単純な Sinatra ベースのアプリケーションがあります。
get '/test' do
puts "#{@@counter}, #{Thread.current.object_id}"
1.upto(30) {|i| sleep 1;puts "#{Thread.current.object_id}, #{i}"}
[200, "#{Thread.current.object_id}, #{@@counter += 1}"]
end
次の puma 設定で rubinius 2.0.0-rc1 に puma (2.5.1) Web サーバーをセットアップしました。
pidfile "#{app_path}/pid_files/puma.pid"
state_path "#{app_path}/pid_files/puma.state"
environment 'production'
threads 3, 3
bind "tcp://x.x.x.x:9292"
daemonize true
私は、この構成が 3 つのリクエストを同時に処理できることを期待していましたが、4 つ目以降のリクエストは未使用のスレッドを待っています。しかし、リクエストは必然的に実行されるようです。2 番目の要求の処理は、最初の要求が終了した後でのみ開始されます。なんで?