【Ruby3.x】Ractor::yield()メソッドの使い方
yieldメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
yieldメソッドは、RubyのRactorクラスに属し、現在のRactorが自身の実行結果や中間的な値を、そのRactorを生成した親Ractorや他のRactorへ安全に渡すことを実行するメソッドです。Ruby 3から導入されたRactorは、並行処理を行うための独立した実行単位であり、それぞれのRactorは隔離されたオブジェクト空間を持つため、直接的なメモリ共有を行いません。Ractor間でデータを交換する主要な手段は、メッセージパッシングと、このyieldメソッドのような明示的な値の受け渡しです。
このyieldメソッドは、Ractor.newで新しいRactorを起動する際に渡されるブロックの内部で呼び出されます。ブロックの実行中にRactor.yieldが呼び出されると、引数として指定された値は、そのRactorの評価結果として一時的に保持されます。その後、Ractorの実行が完了したと見なされ、そのRactorのtakeメソッドを呼び出したRactorにその値が返却されます。
具体的には、あるRactorが複雑なデータ処理や計算タスクを実行し、その最終的な結果を親Ractorに伝えたい場合にRactor.yieldが利用されます。これにより、Ractorは完了時に計算結果の値を安全に転送し、他のRactorがその結果を受け取って処理を続けることが可能になります。この仕組みは、Ractor間の共有状態による競合条件の発生を防ぎながら、複数のRactorが独立して動作しつつ、必要な情報を確実かつ安全にやり取りするための重要な手段です。並行処理におけるデータフローを制御し、堅牢なシステムを構築するために不可欠な機能と言えます。
構文(syntax)
1Ractor.new do 2 Ractor.yield("some_value_to_send") 3end
引数(parameters)
value
- value: Ractor内で生成された値を指定します。
戻り値(return)
Object
Ractor内で実行されるブロックの評価結果を返します。