![OSは複数のコアを活用しているか](https://rvso.com/image/1346155/OS%E3%81%AF%E8%A4%87%E6%95%B0%E3%81%AE%E3%82%B3%E3%82%A2%E3%82%92%E6%B4%BB%E7%94%A8%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%81%8B.png)
コアの数が多いほど良いとは限らず、ほとんどのアプリケーションはシングル スレッドであることはわかっていますが、OS は追加のコアを活用しているのでしょうか。たとえば、辞書ブルート フォーサーなどのアプリケーションがあるとします。プログラムが実際にマルチスレッド化されている場合、クアッド コア プロセッサでこのアプリケーションの 4 つのインスタンス (辞書の別の 1/4 上) を実行すると、同じ利点が得られますか。基本的に、OS は 4 つのインスタンスすべてをプリエンプトせずに同時に実行することを許可するのでしょうか。
私は一度に多数の独立したアプリケーションを実行する傾向があります (多数のタブがある Firefox、オフィス、チャット、開発ツール、ゲームなど)。
答え1
一般的に、はい、コアが使用可能な場合 (つまり、他のプログラムが使用していない場合)、OS は 4 つのコアにプログラムの 4 つのインスタンスを分散します。これにより、潜在的なオーバーヘッドを除けば、4 つのスレッドを使用する場合と同様のメリットが得られます (たとえば、4 つのスレッドは、ロードされた辞書の 1 つのコピーを共有する可能性が高くなりますが、4 つのプロセスは、それぞれ辞書の個別のコピーをロードする可能性が高くなります)。
答え2
利用可能なコアをすべて活用するには、(a) OS からのサポートと、(b) 複数のコアを活用できるアプリケーション ワークロードの両方が必要です。OS からのサポートはすべての最新 OS で当然のことなので、これはアプリケーション ワークロードが複数のコアを活用できるかどうかにかかっています。
複数のアプリケーションを同時に実行している場合は、複数のコアのメリットを享受できます。複数のプログラムを同時に実行しようとすると、OS はそれらを複数のコアでスケジュールします。
一度に 1 つのアプリケーションのみを使用している場合、複数のコアが役立つかどうかはアプリケーションによって異なります。特に、アプリケーションがマルチスレッド用に作成されているか、シングルスレッド用に作成されているかによって異なります。シングルスレッド アプリケーションは一度に 1 つのことしか実行しないため、1 つのコアしか使用できません。マルチスレッド アプリケーションは複数のスレッドを作成して一度に複数のことを実行するため、OS は各スレッドを異なるコアにスケジュールすることができ、マルチコア プロセッサの速度向上が可能になります。
アプリケーションは、複数のスレッドを使用し、複数のコアを利用するように特別に設計および記述される必要があり、多くの一般的なアプリケーションは複数のコアの恩恵を受けていませんが、恩恵を受けるものもあります。たとえば、Photoshop は、計算コストの高いタスクを実行するように指示すると、タスクを小さな部分に分割し、複数のスレッドに分散して複数のコアで実行できるように記述されています。これには Photoshop 開発者による特別なプログラミングが必要であり、開発者に多大な余分な労力がかかります。そのため、多くのアプリケーションまたはほとんどのアプリケーションは、このスタイルのプログラミングをわざわざ使用しておらず、マルチコア マシンからあまり恩恵を受けていませんが、恩恵を受けるものもあります。
多くの独立したプログラムを同時に実行する傾向があることを考えると、マルチコア プロセッサから少なくとも何らかのメリットが得られると考えられます。