我有一个简单的基于 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 配置在 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 个和后续请求将等待未使用的线程。但似乎请求是按顺序运行的。只有在第一个请求完成后才开始处理第二个请求。为什么?