【Ruby3.x】Fiber::schedule()メソッドの使い方
scheduleメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
scheduleメソッドは、Ruby 3で導入されたFiberスケジューラ機能と連携し、ファイバーの実行フローを管理するためのメソッドです。このメソッドはFiberクラスのクラスメソッドであり、直接ファイバーをスケジュールするのではなく、現在Rubyインタプリタに設定されているスケジューラに対して、処理のブロックや待機を通知する役割を担います。
具体的には、Fiber.set_scheduler メソッドによってカスタムスケジューラが設定されている場合、Fiber.schedule はそのスケジューラの block メソッドを呼び出します。これにより、カスタムスケジューラは非同期I/O操作などの完了を待つ間に、他のファイバーに制御を移すといった協調的マルチタスク処理を実現できます。この仕組みは、Webサーバーやデータベースクライアントなど、外部リソースとのやり取りで待機が発生しやすいアプリケーションで特に有効です。
もし、事前にFiber.set_schedulerでスケジューラが設定されていない状態でFiber.scheduleを呼び出すと、FiberError 例外が発生します。これは、スケジューラが未設定の状態ではファイバーのブロック処理を適切に管理できないためです。
この機能は、ノンブロッキングなI/O処理やイベントループベースのアプリケーションにおいて、複数のファイバーを効率的に協調動作させるために使用されます。これにより、アプリケーション全体の応答性を維持しつつ、並行処理をよりシンプルに記述することが可能になります。
構文(syntax)
1Fiber.schedule do |fiber| 2 # スケジューリングロジック 3end
引数(parameters)
*rest, &block
- *rest: Fiber をスケジューリングする際に渡される任意の引数
- &block: Fiber が実行される際に評価されるブロック
戻り値(return)
Object
Fiber#scheduleメソッドは、実行が中断されたFiberを再開させ、そのFiberが中断される直前の式の結果を返します。