Windowsを使っていてシステムが重くなったとき、「せめてタスクマネージャーだけでもサクサク動いてくれればいいのに」と思った方は多いと思います。MicrosoftのベテランエンジニアRaymond Chen氏は、なぜこれが思ったほど簡単ではないのかをブログ記事「Why don't we run the taskbar and Task Manager at high priority, so they can remain responsive?(タスクバーとタスクマネージャーを高い優先度で実行して、応答性を維持できるようにしてはどうでしょうか?) 」で解説しています。高優先度も万能ではない一見すると、タスクバーやタスクマネージャーを高優先度で実行すれば、CPU負荷が高い状況でも操作できそうに思えます。しかし実際には、それほど単純ではありません。例えば、高優先度のスレッドであっても、共有リソースを利用するときは待ち時間が発生します。記事では「優先レーンを使ってもレジの前で大量の買い物客が精算中なら待たなければならない」という例えでこの問題を説明しています。優先度を上げても、他の処理が握っているリソースを横取りできるわけではないのです。特に問題になるのは、待ち合わせの相手が長時間処理を続けている場合です。優先度継承などの仕組みによって優先度の逆転を軽減できるケースはありますが、共有リソースの所有者がネットワークアクセスやI/O処理などに時間を取られていれば、結局は待たされます。つまり、システムが重くなる原因はCPUの処理速度だけではなく、ファイルアクセスや同期処理などさまざまな場所に存在するのです。また、タスクバーやタスクマネージャーのようなUIアプリケーションは、最終的にWindowsのUIシステムと連携する必要があります。そのため、自分だけ高優先度で動いていても、ほかのUIスレッドやシステム内部の共有コンポーネントに依存している以上、完全な応答性を保証することはできません。システム内部からシステムを救う難しさRaymond Chen氏は「暴走しているシステムを、そのシステム内部のツールだけで完全に救うのは難しい」と結論づけています。問題を解決するためのツール自体が、すでに同じ問題の影響を受けている可能性があるからです。Windowsには、現在フォーカスされているアプリケーションを優遇する仕組みが用意されています。そのため、タスクバーやタスクマネージャーにフォーカスを移せれば一定の恩恵は受けられます。しかし、それらのスレッドが低優先度の処理に依存して待たされている場合は、その効果にも限界があります。CPUスケジューリングの優先度を上げても、ロックやI/O、UIシステムなど別の場所で待たされれば応答性は失われます。OSにとって重要なのは、共有資源への依存を減らし、システム全体が健全に動作するよう設計することだといえそうです。