我正在使用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。我建议使用其中之一,而不是手动创建和管理线程。
希望这有帮助