前回では簡単に、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が長いほうがマウスのレポートなどを受け取ったあと、十分な処理時間が割り当てられる可能性が高い。多少バックグラウンドのスレッドが多かったとしても、この仕組みであればフォアグラウンドのアプリケーションに、ある程度の処理時間が割り当てられる可能性が大きいわけだ。+LAN役を終えた航空機体の外壁を切り出し再利用して作成されるドイツ製キーホルダー「アビエーションタグ」ビジネス出張や海外旅行から普段使いまで。スマホお気に入り一覧マイページ。