Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.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 Rails如何服务并发请求_Ruby On Rails_Ruby_Multithreading - Fatal编程技术网

Ruby on rails Rails如何服务并发请求

Ruby on rails Rails如何服务并发请求,ruby-on-rails,ruby,multithreading,Ruby On Rails,Ruby,Multithreading,我将把这个问题分成两部分。 第一部分: Rails如何为同一操作提供并发请求? Rails是在不同线程中提供并发请求,还是在队列中提供并发请求 第二部分: 我为什么要问? 我做了一个非常具体的项目。现在我考虑在必要时更改应用程序架构 问题: 前言 我有一个带动作计算的控制器。 似乎是这样的: def calculate first_player_code = Code.find(params[:first_player_id]) second_player_code

我将把这个问题分成两部分。
第一部分:
Rails如何为同一操作提供并发请求?
Rails是在不同线程中提供并发请求,还是在队列中提供并发请求

第二部分:
我为什么要问?
我做了一个非常具体的项目。现在我考虑在必要时更改应用程序架构

问题: 前言
我有一个带动作计算的控制器。 似乎是这样的:

 def calculate
      first_player_code  = Code.find(params[:first_player_id])
      second_player_code = Code.find(params[:second_player_id])
      File.open("first_player_code.rb", "w"){|file| file << first_player_code}
      File.open("second_player_code.rb", "w"){|file| file << second_player_code}
      system("ruby calculate.rb")
 end
def计算
first\u player\u code=code.find(参数[:first\u player\u id])
second\u player\u code=code.find(参数[:second\u player\u id])

File.open(“first|player|code.rb”,“w”){| File | File您通常会配置这样的web服务器,即使用线程并发处理请求并将其传递给Rails应用程序。使用常规MRI ruby时,不可能实现真正的线程化,因为全局解释器锁会阻止一次运行多个线程

对于长时间运行的进程,您应该尝试通过将这些进程转移到后台作业来防止阻塞。这是一个很好的选择


另请参见

Rails不处理并发请求。一次只处理一个请求。这是web服务器的工作,以启动更多线程或工作线程(或使用事件I/O)来实现一些并发。问题是:什么运行Rails应用程序?如果我理解正确,我不能依赖Rails(standart)并行性(如果我自己没有意识到)。我将在主帖子中添加有关脚本的更多信息。什么是“标准并行性”你在说什么?没有。Rails作为一个框架,一个接一个地按顺序处理请求。当然,可能有几个Rails实例同时运行,但这不属于Rails本身的业务范围。似乎我对Rails有错误的理解。你能提供一些资源,让我了解Rail是如何运行的吗s有效?谢谢,但我认为,最好的方法是重新组织我的应用程序的架构,尽量不使用文件。