Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【Ruby3.x】Ractor::select()メソッドの使い方

selectメソッドの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

selectメソッドは、複数のRactor(ラクター)からのメッセージ受信を効率的に処理するメソッドです。このメソッドは、引数として渡された複数のRactorを監視し、それらのいずれかのRactorからメッセージが送信されるまで待機します。そして、最初にメッセージを送信したRactorと、そのメッセージの内容をセットにして返します。

監視対象となるRactorは、メソッドの引数として個別に指定するか、またはRactorの配列として渡すことができます。オプションとしてタイムアウト時間も指定でき、指定された時間内にメッセージが届かなかった場合はnilを返します。

これにより、システム内の複数の並行処理単位であるRactor間で発生するイベントや、処理結果の通知などを効率的に処理できます。例えば、複数のワーカーRactorに作業を割り振り、その中から最初に完了したRactorの応答を受け取るような場合に特に有用です。

メッセージが届くまで、またはタイムアウトするまで処理を一時停止(ブロック)する点に注意が必要です。また、監視対象のRactorが既に閉じられている場合などには、Ractor::ClosedErrorが発生する可能性があります。Ractorを用いた並行処理において、複雑なメッセージ交換をシンプルに記述するための重要な機能の一つです。

構文(syntax)

1r1 = Ractor.new { Ractor.yield "Hello from Ractor 1" }
2r2 = Ractor.new { Ractor.yield "Hello from Ractor 2" }
3selected_message = Ractor.select(r1, r2)

引数(parameters)

*ractors, **options

  • *ractors: 監視対象の Ractor オブジェクトを可変長引数で指定します。
  • **options: 追加のオプションをハッシュ形式で指定します。

戻り値(return)

[Ractor, object] または [Ractor, object, object] または nil

指定された Ractor からメッセージを受け取ります。メッセージが複数ある場合は、渡されたオブジェクトのうちいずれかと一緒に返されます。メッセージがない場合は nil を返します。

関連コンテンツ