Ruby on rails 线程可以做什么,而进程可以';T 我想输入一些信息,因为这将有助于指导我在研究中应该注意什么(如果我应该考虑线程)。

Ruby on rails 线程可以做什么,而进程可以';T 我想输入一些信息,因为这将有助于指导我在研究中应该注意什么(如果我应该考虑线程)。,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,在Rails应用程序中,线程是绝对必要的,而多进程模型不能提供适当的解决方案。一个例外是应用程序有内存限制,需要使用线程,而不是生成多个进程。但是,假设内存不是问题,那么还有哪些情况下线程是更好的选择?通常,线程比进程更有效地创建/删除 更高效,主要是因为SideKiq工作线程,而Resque使用分叉工作线程(进程) 但问题是RubyonMRI没有本机线程,因此Ruby中的每个线程都受到全局解释器锁(GIL)的限制。有关更多信息,请参阅这篇Igvita文章: 在JRuby等具有本机线程的平台上,

在Rails应用程序中,线程是绝对必要的,而多进程模型不能提供适当的解决方案。一个例外是应用程序有内存限制,需要使用线程,而不是生成多个进程。但是,假设内存不是问题,那么还有哪些情况下线程是更好的选择?

通常,线程比进程更有效地创建/删除

更高效,主要是因为SideKiq工作线程,而Resque使用分叉工作线程(进程)

但问题是RubyonMRI没有本机线程,因此Ruby中的每个线程都受到全局解释器锁(GIL)的限制。有关更多信息,请参阅这篇Igvita文章:


在JRuby等具有本机线程的平台上,您可以拥有一个多线程Rails应用程序(在servlet容器中运行),并且它可能会在MRI下运行相同的应用程序。Hotspot JVM上的JRuby也可能进行实时性能优化。

线程更容易编写和调试。我将从简单的非线程代码开始,调试它,然后用
Thread.new
join
包装一个块,最后我就完成了

是的,研究它们。您将学习有用的技术,并获得“编程工具箱”中应有的知识


线程能做什么,进程不能做什么?线程可以很容易地共享数据,并在同一个或多个队列中工作。使用单独的进程执行此操作需要一个数据库或IPC或使用消息队列,所有这些都会增加很多复杂性(尽管它们也会增加容量)。

大多数时候,我读到的是线程的复杂性和复杂性,而不是它们的简单性。如此之多,以至于许多程序员似乎乐于考虑单独的进程间消息队列的额外工作。你同意吗?我认为这取决于工作的复杂性。线程不是用于繁重的任务,至少不是我们现在拥有的。我们在工作中使用MQ来管理一些过去需要24小时以上才能运行的作业,使用一些Ruby和一个小型*nix主机,我们将这些作业减少到<1小时。线程不会这么做的。但是,同样,为MQ编写节点也可能是多余的,所以你必须考虑工作并做对该工作有意义的事情。