在 Rails 操作中使用 Thread.new

mst*_*rom 3 ruby parallel-processing ruby-on-rails

当使用多进程应用程序服务器并Thread.new在控制器操作中运行(产生多个线程)时,是否实现了并行性?或者 GIL 是否会阻止这种情况发生?

tad*_*man 7

全局解释器锁 (GIL) 可防止在任何给定时间运行多个 Ruby 线程,这具有将 Ruby 限制为仅一个内核的实际效果。除此之外,它们是实际的线程。

如果你需要真正的并发,你需要运行一个没有 GIL 的 Ruby,比如 JRuby。

话虽如此,Ruby 中的线程适用于许多不固定 CPU 内核的操作。如果您是,您可能应该通过ActiveJob为这些操作创建后台作业。如有必要,它们可以在不同系统上的一个或多个进程中运行。