「This is CLR」の続きを書いていきたかったのだが、別の事に興味がいってしまった。そう、ファイバだ。この記事のコメントを参照して欲しいのだけど、SQL Server、スレッド、ファイバの関係は想像以上に難解だ。私の頭では殆ど理解不能。
という事で、ファイバについて考察してみる。尚、これからの記事は調査しながらの記述になるので、正当性は何ら保障しない。しかも途中で諦めて尻切れになるかもしれない。だが、できるだけ頑張って正確な情報を最後まで書いていくつもりだ。
SQL Server はスケジューリングに関して非常に高度な事を行っている(※1)。ファイバの話は殆ど SQL Server と絡んでくるので、SQL Server の話を抜きにしてファイバは語れないだろう。
まずは、ファイバの説明を簡単にしておく。
スレッドはプロセスを軽量にしたものと言われ、複数の処理を同時に行いたい場合に複数のプロセスを作成するのではなく、複数のスレッドを作成すればコストが安いというわけだ。ファイバは、そのスレッドを更に軽量にしたものである。
ファイバは OS のスケジュールに組み込まれていない。ファイバの存在をまるっきり無視する。よって、ファイバの切り替えはユーザーコードが明示的に行わなければならない。この性質が欠点であり利点である。
Advanced Windows によれば、ファイバの存在意義は UNIX コードの移植にあった。OS スレッドを使わないで、ユーザーコードでコンテキストを切り替えているプログラムの移植にこそファイバを使うべきであって、通常は OS スレッドを使うべきだとある。
続く。
※1 SQLOS、UMS というキーワードで調べてみてほしい。