【Ruby3.x】Thread::SizedQueue::<<()メソッドの使い方
<<メソッドの使い方について、初心者にもわかりやすく解説します。
作成日: 更新日:
基本的な使い方
<<メソッドは、指定された要素をThread::SizedQueue(サイズ制限付きキュー)の末尾に追加するメソッドです。
Thread::SizedQueueは、あらかじめ最大要素数が決められているキューであり、複数のスレッドから安全にアクセスできるように設計されています。このメソッドを使用すると、キューの末尾に新しい要素を追加できますが、キューがすでに最大容量に達している場合には、特別な挙動を示します。
具体的には、キューが満杯のとき、<<メソッドを呼び出したスレッドは、キューに空きができるまで処理を一時的に停止します(ブロックされます)。これは、他のスレッドがキューから要素を取り出して空きができたときに、自動的にブロックが解除され、要素が追加される仕組みです。この特性により、データの生産者(要素を追加する側)と消費者(要素を取り出す側)の間で、処理速度の差を調整し、キューの容量を超過しないように制御できます。
このメソッドはスレッドセーフであるため、複数のスレッドが同時にキューに対して要素を追加しようとしても、データの整合性が保たれます。これにより、並行処理を行うシステムにおいて、データの安全な受け渡しやバッファリングを実現するために非常に有効です。
構文(syntax)
1queue = Thread::SizedQueue.new(5) 2queue << "element"
引数(parameters)
object, non_block: false, timeout: nil
- object: キューに追加するオブジェクト
- non_block: false: ブロッキングモードで実行するかどうかを指定する真偽値。false の場合は、キューがいっぱいの場合、空きができるまで待機します。true の場合は、キューがいっぱいの場合、例外を発生させます。
- timeout: nil: ブロッキングモードで待機する最大秒数を指定する数値。nil の場合は、無制限に待機します。
戻り値(return)
Thread::SizedQueue
このメソッドは、スレッドセーフなキューに要素を追加し、キューのサイズが最大に達している場合はブロックします。追加した要素自身が返されます。