Ruby on rails 3 thin、unicorn、puma、webrick中的并发处理
如果我在控制器中有以下操作Ruby on rails 3 thin、unicorn、puma、webrick中的并发处理,ruby-on-rails-3,concurrency,thin,unicorn,puma,Ruby On Rails 3,Concurrency,Thin,Unicorn,Puma,如果我在控制器中有以下操作 def give_a print a a = a+1 end 当一个请求到达和接收到多个请求时,每个Web服务器中会发生什么 我知道webrick和thin是单线程的,所以我想这意味着在当前请求完成之前,不会处理a请求 在并发Web服务器(如puma或unicorn)中会发生什么情况(可能是其他) 如果有2个请求来了,并且有2个unicorn线程处理它们,那么这两个响应会给出相同的值吗?(在两个请求同时输入方法的情况下) 或者这一切都取决于服务器本身发生了什么,
def give_a
print a
a = a+1
end
当一个请求到达和接收到多个请求时,每个Web服务器中会发生什么
我知道webrick和thin是单线程的,所以我想这意味着在当前请求完成之前,不会处理a请求
在并发Web服务器(如puma或unicorn)中会发生什么情况(可能是其他)
如果有2个请求来了,并且有2个unicorn线程处理它们,那么这两个响应会给出相同的值吗?(在两个请求同时输入方法的情况下)
或者这一切都取决于服务器本身发生了什么,对数据的访问是串行的吗
有没有办法为并发Web服务器提供互斥/信号量?好的,rails应用程序会为每个请求环境创建一个YourController.new
从您发布的内容中,不可能看到a
的含义。当它是某个共享类变量时,则它是可变状态,可以从两个请求线程进行修改。谢谢,对数据库的请求是否在单个队列中(在标准应用程序中)?-如果a
是从数据库队列中获取的值?不,没有排队!如果您想保证这些值在请求期间不会更改,则需要锁定数据库。这是一种非常糟糕的做法,称为悲观锁定。您通常使用where子句进行乐观锁定。