
プロセスはパフォーマンスを向上させるために異なるコア間を切り替えますか? プロセスがコア間を移動する場合は、どのコンポーネントがコア間で共有されますか? L1-L3 キャッシュ、レジスタ、またはメモリ?
答え1
負荷が 100% に近づいている、2 つのコアを持つ忙しい単一 CPU システムを想像してみましょう。
PID 1234 のプロセスにはスレッドが 1 つだけあります (例: モノスレッド オーディオ圧縮を実行するコンソール アプリケーション)。
このようなプロセスの場合、システムはキャッシュ エラーを最小限に抑えるために、スレッドを同じコアで実行するように最善を尽くします。ただし、システムが非常にビジー状態の場合、同様の他のプロセスも同じコアで実行しようとする可能性があります。この場合、原則として、単一スレッド プロセスは最初にコア #1 で実行され、次にコア #2 で実行されるというように続きます。
答え2
プロセスはパフォーマンスを向上させるために異なるコア間で切り替えますか?
これは、プロセスがマルチスレッド プロセスであるかどうかによって異なります。プロセス自体は基本的にスレッドの単なる「コンテナ」であり、実行するには少なくとも 1 つのスレッドが必要です。各スレッドは CPU のコアを 1 つ使用できます。したがって、プロセスに 2 つのスレッド (GUI スレッドと作業スレッド) がある場合は、2 つの CPU コアで実行されます。
「プロセスは異なるコア間で切り替わるでしょうか」という質問は、そのような切り替えはプロセス自体ではなく、オペレーティング システム (OS) によってスケジュールされるため、正確には正しくありません。
答え3
CPU 間のプロセス切り替えは、プロセス情報とレジスタをメモリに保存し、それを他の CPU にロードすることを意味するため、パフォーマンスが低下します。
これらのストア コマンドとロード コマンドは、CPU 上で最も遅いコマンドの 1 つですが、実行頻度が非常に低い場合は気付かれません。
このプロセスは、プロセスがタイムスライスを終了し、オペレーティング システムによって一時停止され、その後新しいタイムスライスで再起動される場合とまったく同じです。