2

我正在使用 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 中做类似的事情。

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

4

2 回答 2

1

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

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

希望这可以帮助

于 2017-01-04T23:23:31.447 回答
1

我认为https://github.com/ruby-concurrency/concurrent-ruby是 ruby​​ 中最常用的带有 utils 的库。

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

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

于 2017-01-04T23:34:14.017 回答