ファイバー【fiber】
概要

一般的に、プログラム上で並行処理を実現する方法としては、オペレーティングシステム(OS)が管理する「スレッド」(thread)を用いる手法がよく知られる。スレッドはプリエンプティブ方式で動作し、スレッド間の実行の切り替えはカーネルによって自動的かつ強制的に行われる。
一方、ファイバーはシステム側ではなく言語処理系やランタイムが管理する軽量スレッドの一種であり、実行の切り替えをプログラム側が明示的に制御する協調的スケジューリング方式を採用することが多い。あるファイバーが自発的に処理を中断しない限り、他のファイバーに実行権は移らない仕組みである。
ファイバーはカーネルを介さずにユーザー空間でコンテキストを切り替えるため、スレッドに比べて生成や切り替えのオーバーヘッドが小さい。大量の同時実行単位を扱う高負荷なサーバ処理や非同期I/O処理との組み合わせで利用されることがある。また、イベント駆動型の設計と組み合わせることで、見かけ上は逐次的なコード構造を保ちながら、多数の処理を効率よく実行することができる。
代表的な実装例としては、Rubyにおける「Fiber」機能や、Go言語における「goroutine」(ゴルーチン)が挙げられる。後者は内部的にランタイムが多数の軽量実行単位を管理し、少数のOSスレッド上でスケジューリングを行う。また、近年のJavaでは実質的にファイバーと同等の「仮想スレッド」(virtual thread)の仕組みが導入され、従来のスレッドよりも軽量な並行処理モデルが提供されている。