如何管理 Ruby on Rails 中的多个线程(相当于 Java 线程工厂)?

How can I manage multiple threads in Ruby on Rails (equivalent of a Java thread factory)?

我在 Rails 5 上使用 Ruby,尽管我是 Ruby/Rails 的新手。我读过有关使用

创建线程的内容
   t = Thread.new {
      sleep(rand(0)/10.0)
      Thread.current["mycount"] = count
      count += 1
   }

但是,我想知道在 Ruby/Rails 中是否有管理一堆应用程序创建的线程的标准方法。我熟悉 Java,它有一个线程工厂。这允许一定数量的线程并发 运行 而其他线程必须在队列中等待。我想知道如何在 Ruby/Rails.

中做类似的事情

请注意,我不是在谈论请求网页时自动生成的线程类型。我说的是我(应用程序所有者)创建的线程。

特别是如果您在线程中使用 ActiveRecord,则需要注意并发问题,例如数据库连接泄漏。

通常,如果您想启动一个新线程,您希望在后台异步执行某些操作,而不是让用户的请求挂在昂贵的操作上。为此,有一些很棒的库,例如 Sucker Punch and Sidekiq。我建议使用其中之一,而不是手动创建和管理线程。

希望对您有所帮助

我认为 https://github.com/ruby-concurrency/concurrent-ruby 是 ruby 中最常用的具有并发实用程序的库。

它有很多有用的东西,包括线程池 (http://ruby-concurrency.github.io/concurrent-ruby/file.thread_pools.html),我认为这正是您要找的东西。

请记住,MRI Ruby 具有 GIL,因此只有在线程等待 IO 时才具有并行性。对于繁重的计算,您可能需要使用 jRuby 或查看其他地方:)