前回では簡単に、Windowsの「スケジューリングアルゴリズム」について解説した。今回は一歩踏み込んで、具体的なWindowsでのスレッド実行について見ていくことにしよう。Windowsのタイムスライスは「Quantum」単位で割り当てるWindowsではスレッドに対して、一定の実行時間を割り当てる。これを「タイムスライス」と呼ぶ。基本的にすべてのスレッドは、このタイムスライスの間だけ実行されて、時間が終わると次のスレッドに切り替わる。Windowsは“プリエンプティブ”なスケジューリングを採用しているので、優先順位の高いスレッドがキューに入ると、そのスレッドが、ほかのスレッドから制御を横取りして実行を開始する。そのタイミングは、一定時間ごとにハードウェアが発生させるタイマー割り込みによる。一般的なパソコンでは、15.6ミリ秒ごとにCPUに割り込みがかかり、そのタイミングでスケジューラー(ディスパッチャー)が動作して、より優先順位の高いスレッドがあれば、そのスレッドを実行する。どのスレッドも、前述のタイムスライスの期間分だけ、実行時間を割り当てられる。時間を横取りされた場合でも、より優先順位の高いスレッドがなくなったとき(つまり自身が最も高い優先順位になったとき)には、制御が戻ってタイムスライスの残りを実行する。スレッドがタイムスライスを使いはたしたら、同じ優先順位の実行待ち行列の最後に置かれて次の順番を待つ。このタイムスライス割り当てだが、Windowsでは「Quantum」という単位で割り当てられる。基本的にタイムスライスの割り当て量は、Quantumの整数倍になる。前述したタイマー割り込みの1周期(15.6ミリ秒)が、3Quantumに相当すると定義されている。そのため、実際のタイムスライスの割り当ては、3の倍数となるわけだ。7などクライアント系のWindowsでは、タイムスライスは6quantumであり、サーバー系では36Quantumとなっている。クライアント系での割り当ては「Short」と呼ばれ、サーバー系の割り当ては「Long」という。これはレジストリで制御されるパラメーターであり、クライアント系でもタイムスライス割り当てをLongに設定することが可能だ。Boosting」という機能がある。この機能では、フォアグラウンドのスレッドに3倍、つまり18Quantumのタイムスライスを割り当てる。このような仕組みが作られた背景には、フォアグラウンドのプロセスはGUI操作とアプリケーション内部の処理を行なう必要があり、ユーザーのスムーズな操作を可能にするためには、少し大きめの時間を与える必要があるからだ。6Quantumは、タイマーの時間でいえば2周期、約31.2ミリ秒となる。これに対して3倍となる18Quantumは、93.6ミリ秒もある。スレッド実行のタイミングは同時に実行されているスレッド数や、それらの優先順位によって変わるものだ。GUI操作ではマウスのレポートレートなども関係する。確率的に言えば、Quantumが長いほうがマウスのレポートなどを受け取ったあと、十分な処理時間が割り当てられる可能性が高い。多少バックグラウンドのスレッドが多かったとしても、この仕組みであればフォアグラウンドのアプリケーションに、ある程度の処理時間が割り当てられる可能性が大きいわけだ。スマホお気に入り一覧マイページ。