对于像邮寄和发布到外部网站这样的长时间运行的进程,是否可以使用 Ruby Thread.new 而不是像 Delayed Jobs 或 Resque 这样的后台工作程序?
问问题
923 次
1 回答
2
这取决于你所说的OK。Ruby 有一个全局解释器锁(大多数实现都这样做 - JRuby 是一个例外),这意味着您不会使用 Thread.new 方法获得真正的并发性。这并不意味着您根本没有获得任何并发性。这在多个地方进行了更深入的讨论:
- http://ablogaboutcode.com/2012/02/06/the-ruby-global-interpreter-lock/
- http://merbist.com/2011/10/03/about-concurrency-and-the-gil/
- http://www.igvita.com/2008/11/13/concurrency-is-a-myth-in-ruby/
Delayed Jobs 和 Resque 方法都涉及让一个或多个单独的进程执行长时间运行的操作。对于多个进程,您将在 Rails 应用程序和后台工作进程之间实现真正的并发,因为 GIL 根本不会妨碍您。
于 2012-12-21T06:09:55.010 回答