Windows と Linux の場合、タスクは「ファイバ」と呼ばれる軽量スレッドで実行されます。ファイバを使用すると、オペレーティング・システムのスレッドのスケジューラに依存せず、協調性を持ってスケジュールするように、スレッドでタスクを実行できます。オペレーティング・システムのカーネルやスケジューラの介入がないため、ファイバ間の切り替えでは、スレッドを使用した切り替えに比較して負荷が大幅に低下します。スレッドを使用した切り替えが頻繁に発生するマルチスレッド・アプリケーションでファイバを使用すると、パフォーマンスとスケーラビリティを格段に向上させることができます。
ファイバは、オペレーティング・システム・スケジューラに依存しないため、他のアクティビティの完了を待機しているときは、制御を別のファイバに明示的に譲ります。たとえば、ファイバで実行中のタスクにおいて、I/O 操作の完了を待機するなどの理由でブロックが必要になると、ファイバは制御を解放して他のファイバに譲ります。元のファイバを実行しているスレッドは、カーネルを介した切り替えを行うことなく、即座に別のファイバを選択して実行を開始できます。ファイバがブロックしたが制御を譲らなかった場合、そのファイバを実行しているスレッドがブロックされ、他のファイバがそのスレッドで実行できなくなります。複数のスレッドがファイバを実行している場合、待機中のファイバを実行しているスレッドだけがブロックされます。他のスレッドは、ファイバを自由に実行できます。
ファイバをサポートするプラットフォームには、少なくとも、サーバの最大同時実行性設定 (-gn オプションで指定) で求められた数と同数のファイバが存在します。内部のサーバ・タスクに対してファイバが常にサービスを提供できるように、サーバは指定された数よりも多いファイバを作成することもあります。-gn サーバ・オプションを参照してください。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |