Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.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 RubyonRails中线程、并发和分叉进程的现状如何?_Ruby On Rails_Ruby_Concurrency - Fatal编程技术网

Ruby on rails RubyonRails中线程、并发和分叉进程的现状如何?

Ruby on rails RubyonRails中线程、并发和分叉进程的现状如何?,ruby-on-rails,ruby,concurrency,Ruby On Rails,Ruby,Concurrency,RubyonRails不能很好地处理多线程请求响应,或者至少ActiveRecord不能 在创建web应用程序时,同时只有一个请求-响应处于活动状态的概念可能是一个麻烦,因为web应用程序会派生一个需要很长时间才能完成的shell命令 我想听听你对这类设置的一些看法?Rails是否不适合某些应用程序 另外,RubyonRails中并发性的现状如何?最佳做法是什么。这些缺点有解决办法吗?Rails目前不能在单个MRI(Matz Ruby解释器)Ruby进程中处理并发请求。每个请求基本上都用一个巨大

RubyonRails不能很好地处理多线程请求响应,或者至少ActiveRecord不能

在创建web应用程序时,同时只有一个请求-响应处于活动状态的概念可能是一个麻烦,因为web应用程序会派生一个需要很长时间才能完成的shell命令

我想听听你对这类设置的一些看法?Rails是否不适合某些应用程序


另外,RubyonRails中并发性的现状如何?最佳做法是什么。这些缺点有解决办法吗?

Rails目前不能在单个MRI(Matz Ruby解释器)Ruby进程中处理并发请求。每个请求基本上都用一个巨大的互斥锁包装。为了使即将发布的Rails 2.2线程安全,已经做了大量工作,但是在Ruby 1.8x下运行时,您不会从中获得很多好处。我不能评论Ruby1.9是否会有所不同,因为我对它不是很熟悉,但可能不是我想的那样


在这方面看起来非常有希望的一个领域是使用JRuby运行Rails,因为JVM通常被认为擅长多线程。Sun Microsystems最近在RailsConf Europe上对此设置进行了一些介绍。

如果您在shell上运行的内容对于页面的呈现不是必需的(例如,您仅触发维护任务或其他内容),则应将其作为后台进程启动。看看椋鸟和工作


如果这不适用于您的情况,您必须确保应用程序服务器的多个实例运行。传统上,人们会启动多个混血儿实例。但是现在我要说的是,到目前为止,最简单的方法是使用。它是一个Apache模块,允许您轻松指定希望运行的应用程序服务器实例数(最小和最大)。其余的由乘客负责。如果我没记错的话,它不会在发送请求时进行愚蠢的循环。我认为这取决于可用性。

Matz的Ruby 1.8使用,Matz的Ruby 1.9将使用本机O/s线程。Ruby1.8的其他实现,如JRuby和IronRuby,使用本机O/S线程。YARV是另一个Ruby虚拟机的缩写,它也使用本机O/S线程,但有一个全局解释器锁,以确保在任何给定时间只执行一个Ruby线程

Ruby 1.9正在添加轻质光纤:


允许无阻塞功能,而无需修改编写程序的方式。这确实是一个令人兴奋的项目,并且是在Ruby1.8.x上进行后端口工作的(它依赖于Ruby1.9的光纤)。它与PostgreSQL和MySQL一起工作以执行非阻塞查询。这些都是疯狂的…

有任何web框架擅长于这类事情吗?@matt b Yup,Twisted@matt b Java servlet为每个请求创建一个新线程。