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



我正在使用Ruby on Rails 5,尽管我是Ruby/Rails的新手。 我已经阅读了有关使用 创建线程的信息

   t = Thread.new {
      sleep(rand(0)/10.0)
      Thread.current["mycount"] = count
      count += 1
   }

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

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

我认为 https://github.com/ruby-concurrency/concurrent-ruby 是最常用的库,其中包含用于 ruby 中的并发实用程序。

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

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

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

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

希望这有帮助

最新更新