Ruby on rails RubyonRails中线程、并发和分叉进程的现状如何?
RubyonRails不能很好地处理多线程请求响应,或者至少ActiveRecord不能 在创建web应用程序时,同时只有一个请求-响应处于活动状态的概念可能是一个麻烦,因为web应用程序会派生一个需要很长时间才能完成的shell命令 我想听听你对这类设置的一些看法?Rails是否不适合某些应用程序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中并发性的现状如何?最佳做法是什么。这些缺点有解决办法吗?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为每个请求创建一个新线程。