У меня есть простое приложение на основе Sinatra, которое замораживает каждый запрос на 30 секунд:
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 (2.5.1) на rubinius 2.0.0-rc1 со следующей конфигурацией puma:
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-й и последующие запросы будут ожидать неиспользуемого потока. Но оказалось, что запросы выполняются последовательно. Обработка второго запроса начинается только после завершения первого запроса. Почему?