【Ruby3.x】Ractor::receive()メソッドの使い方
receiveメソッドの使い方について、初心者にもわかりやすく解説します。
作成日: 更新日:
基本的な使い方
receiveメソッドは、Ractorが他のRactorからメッセージを受信する際に使用するメソッドです。Ruby 3で導入されたRactorは、並行処理を安全に行うための仕組みであり、それぞれが独立した実行コンテキストを持ちます。これらのRactorは、共有メモリを直接使わず、メッセージを送り合うことで連携します。
receiveメソッドは、現在のRactorのメッセージキューに届いたメッセージの中から一つを取り出し、その値を返します。メッセージがまだ届いていない場合は、新しいメッセージが到着するまで現在のRactorの実行を一時的に停止(ブロック)します。これにより、Ractorは必要なデータが準備されるまで待機することができます。
複数のRactorから同時にメッセージが送信された場合でも、receiveメソッドはキューから利用可能なメッセージを一つだけ受け取ります。メッセージは通常、送信元のRactorがsendメソッドを使用して送信したものです。Ractor間のメッセージとして送受信されるデータは、原則として自動的にディープコピーされるか、変更ができないようにフリーズされるため、異なるRactor間で不意にデータが変更されることを防ぎ、安全な並行プログラミングを実現します。receiveメソッドは、Ractorを活用した堅牢なシステムを構築する上で不可欠な要素です。
構文(syntax)
1Ractor.receive
引数(parameters)
引数なし
引数はありません
戻り値(return)
Object
Ractor#receive メソッドは、他の Ractor から送信されたオブジェクトを受け取ります。このメソッドは、受け取ったオブジェクトをそのまま返します。