ファイバー【fiber】

概要

ファイバーとは、一つのプログラムで並行して複数の処理を実行するための軽量な実行単位で、スレッドよりも小さな粒度で処理の切り替えを行う仕組み。主にユーザー空間で管理され、協調的に実行が制御される。
ファイバーのイメージ画像

一般的に、プログラム上で並行処理を実現する方法としては、オペレーティングシステム(OS)が管理する「スレッド」(thread)を用いる手法がよく知られる。スレッドプリエンプティブ方式で動作し、スレッド間の実行の切り替えはカーネルによって自動的かつ強制的に行われる。

一方、ファイバーはシステム側ではなく言語処理系ランタイムが管理する軽量スレッドの一種であり、実行の切り替えをプログラム側が明示的に制御する協調的スケジューリング方式を採用することが多い。あるファイバーが自発的に処理を中断しない限り、他のファイバーに実行権は移らない仕組みである。

ファイバーはカーネルを介さずにユーザー空間でコンテキストを切り替えるため、スレッドに比べて生成や切り替えのオーバーヘッドが小さい。大量の同時実行単位を扱う高負荷なサーバ処理や非同期I/O処理との組み合わせで利用されることがある。また、イベント駆動型の設計と組み合わせることで、見かけ上は逐次的なコード構造を保ちながら、多数の処理を効率よく実行することができる。

代表的な実装例としては、Rubyにおける「Fiber」機能や、Go言語における「goroutine」(ゴルーチン)が挙げられる。後者は内部的にランタイムが多数の軽量実行単位を管理し、少数のOSスレッド上でスケジューリングを行う。また、近年のJavaでは実質的にファイバーと同等の「仮想スレッド」(virtual thread)の仕組みが導入され、従来のスレッドよりも軽量な並行処理モデルが提供されている。

この記事の著者 : (株)インセプト IT用語辞典 e-Words 編集部
1997年8月より「IT用語辞典 e-Words」を執筆・編集しています。累計公開記事数は1万ページ以上、累計サイト訪問者数は1億人以上です。学術論文や官公庁の資料などへも多数の記事が引用・参照されています。