Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 thin、unicorn、puma、webrick中的并发处理_Ruby On Rails 3_Concurrency_Thin_Unicorn_Puma - Fatal编程技术网

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子句进行乐观锁定。