Tag: 多处理

MRI Ruby的并发请求

我把一个简单的例子放在一起,尝试使用一个基本的例子来certificateRails中的并发请求。 请注意,我使用的是MRI Ruby2和Rails 4.2。 def api_call sleep(10) render :json => “done” end 然后我在我的Mac(I7 / 4 Core)上的Chrome中找到4个不同的选项卡,看看它们是以串行还是并行方式运行(真正并发的是关闭但不是同一个东西)。 即, http:// localhost:3000 / api_call 我不能使用Puma,Thin或Unicorn来使用它。 每个请求都是串联的。 10秒后的第一个标签,20个之后的第二个标签(因为它必须等待第一个完成),之后是第三个…. 从我所读到的,我相信以下是真实的(请纠正我)并且是我的结果: Unicorn是多进程的,我的例子应该有效(在定义unicorn.rb配置文件中的worker数量之后),但事实并非如此。 我可以看到4名工人开始,但一切都在串联。 我正在使用unicorn-rails gem,使用unicorn -c config / unicorn.rb启动rails,在我的unicorn.rb中我有: – unicorn.rb worker_processes 4 preload_app true timeout 30 listen 3000 after_fork do |server, worker| ActiveRecord::Base.establish_connection end Thin和Puma是multithreading的(虽然Puma至少有一个’ 集群 ‘模式,你可以使用-w参数启动worker)并且不应该使用MRI Ruby2.0无论如何(在multithreading模式下),因为“有一个全局解释器锁(GIL)确保一次只能运行一个线程“。 所以, 我有一个有效的例子(或使用睡眠错误)? […]