UNIX の場合、タスクはオペレーティング・システム・スレッドで直接実行されます。これらのプラットフォームでは、オペレーティング・システム・スレッドの数は -gn オプション・セットの値によって設定されます。データベース・サーバの起動時、オプションで設定された値に基づいてスレッドが作成されます。すべてのタスクは、このスレッド・セットから実行されます。スレッドが利用可能になると、そのスレッドは、処理を要求するタスクの中から、次に利用可能なタスクを選択します。タスクの処理を開始したスレッドは、そのタスクが完了するまで存続します。タスクにおいて、I/O 操作やロックを待機するなどの理由でブロックが必要になると、スレッドは自発的に CPU の制御を解放してオペレーティング・システムのスケジューラに戻し、CPU で他のスレッドを実行できるようにします。
スレッドは、自発的に CPU を解放する場合もありますが、オペレーティング・システムのスケジューラによって先取りされることもあります。プロセス内の各アプリケーション・スレッドには、実行する一連のタイム・スライス、実行時間の長さ (優先度によって決定されます)、その他のシステム要因などが指定されています。スレッドが現在のタイム・スライスの最後に達すると、そのスレッドはオペレーティング・システムによって先取りされ、後で再び実行されるようにスケジュールされます。オペレーティング・システムのスケジューラは、別のスレッドを選択し、タイム・スライスに基づいてそのスレッドを実行します。このプリエンプティブ・スケジュールは、タスクの処理に対して、目に見える形で影響を及ぼすことはありません。スレッドが再び実行されるようにスケジュールされると、タスクは中断したところから処理が開始されます。
アクティブ・タスクの処理が完了すると、スレッドは、処理が可能なタスクが他にあるかどうかを確認します。該当するタスクが存在する場合は、スレッドは次に利用可能なタスクを選択し、処理を続けます。それ以外の場合は、スレッドは CPU を解放し、新しいタスクがデータベース・サーバに到着するのを待機します。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |