LoginSignup
2
3

More than 5 years have passed since last update.

Celluloidをさわってみる

Posted at

スレッド管理をするために、少しだけCelluloidを触ってみた。

IO周りの非同期処理、Fault-toleranceをうまい具合にやってくれる。スレッドが死んでしまった場合でも監視しているので、自動でスレッドを生成してくれる。

celluloid.rb
class Supervisor

  def initialize
    @supervisor = Celluloid::SupervisionGroup.run!
    @supervisor.pool(Worker, as: :worker, size: 2)
  end

  def run
    loop do
      @supervisor[:worker].process
    end
  end

end

class Worker
  include Celluloid

  def process
    puts "do something!!"
  end
end

SupervisionGroup でスレッドをグループ化して管理する。グループ化することでスレッドの起動と停止をグループごとに行うことができる。
詳細は公式ドキュメントを参照。

@supervisor.pool(Worker, as: :worker, size: 2)ではグループのPoolにWorkerクラス(実際に処理をさせるクラス)を指定して、as: :workerworker という名前で定義する。size:で同時に生成するスレッド数を指定する。

あとは@supervisor[:worker].processWorker#process を実行する。

Message Queuingで使ってみた感想としては、単純なスレッドの生成(Threadを使った)より並列処理の速度は落ちてしまうようです。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3