Windows と Linux の場合、ワーカーは「ファイバー」と呼ばれる軽量スレッドを使用して実装されます。ファイバーを利用した実装によって、オペレーティングシステムスレッドのスケジューラーでワーカーを先取りでスケジュールするのではなく、協調的にスケジュールできます。その結果、ファイバー間の切り替えをより詳細に制御できるようになります。データベースカーネルは、プロセッサーの結び付きを最大にして各ワーカーの実行優先度を密接に制御するようにファイバーをスケジュールします。
ファイバーは、オペレーティングシステムスケジューラーに依存しないため、他のアクティビティの完了を待機しているときは、制御を別のファイバーに明示的に譲ります。たとえば、ファイバーで実行中のタスクにおいて、I/O 操作の完了を待機するなどの理由でブロックが必要になると、ファイバーは制御を解放して他のファイバーに譲ります。元のファイバーを実行しているスレッドは、カーネルを介した切り替えを行うことなく、即座に別のファイバーを選択して実行を開始できます。ファイバーがブロックしたが制御を譲らなかった場合、そのファイバーを実行しているスレッドがブロックされ、他のファイバーがそのスレッドで実行できなくなります。複数のスレッドがファイバーを実行している場合、待機中のファイバを実行しているスレッドだけがブロックされます。他のスレッドは、ファイバーを自由に実行できます。
Windows と Linux プラットフォームには、少なくとも、データベースサーバーの最大同時実行性設定 (-gnh オプションで指定) で求められた数と同数のファイバーが存在します。データベースサーバーは、サーバーの実行中に、現在のサーバーマルチプログラミングレベルに対応する、これらのファイバーのサブセットを利用します。ファイバーごとに、オペレーティングシステムはスタックのアドレス領域を予約する必要があります。各ファイバーに必要なスタックのサイズは、-gss サーバーオプションの設定によって異なります。
ネットワークサーバーで必要な実行スタックのアドレス領域のサイズは、最大マルチプログラミングレベルに比例します。
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |