如何管理 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 或查看其他地方:)
我在 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 或查看其他地方:)