マルチコアプロセッサは複数のプロセスを同時に実行できますか?


9

マルチコアプロセッサは、異なるコアを使用して、同じプロセスの複数のスレッドを同時に実行できることを理解しています。
複数のプロセスを同時に実行することもできますか(各コアは異なるプロセスを実行しています)?

回答:


14

オペレーティングシステムとアプリケーションに関する限り、各コアは個別のプロセッサであり、複数のプロセッサを持つ場合と同じアフィニティルールが適用されます。

プロセスが実行されるプロセッサ(実プロセッサ、コアスレッド、ハイパースレッド)は、オペレーティングシステムのスケジューリングシステムに完全に依存します。プロセスをどこでいつ実行するかを決定するのは、このスケジューリングシステム(アフィニティ設定の影響を受ける)です。プロセスとスレッドは、スケジューラーが適切と考えるように、プロセッサーとコアを自由に切り替えることができます。


7

オペレーティングシステムに関する私の限られた知識から、すべてのプロセスには少なくとも1つのスレッドがあり、プロセス自体ではなく、これらのスレッドがスケジュールされると信じてます。プロセスは単に、プログラムおよびプログラムが実行を設定したスレッドに関する情報を保持します。この方法では、シングルスレッドアプリケーションはマルチスレッドアプリケーションと同じように扱われますが、マルチスレッドアプリケーションはリソースをより効率的に使用できます。

たとえば、2つのスレッドを持つ2つのプロセスと1つのスレッド化されたアプリケーションがあり、すべてがデュアルコアプロセッサ(またはデュアルCPU、ここでは違いはない)で一生懸命働いているとします。

 Process A
    |_Thread A-1
    |_Thread A-2

 Process B
    |_Thread B-1
    |_Thread B-2

 Process C
    |_Thread C

各スレッドは、CPUのすべてのコアにわたってスケジュール可能であり、負荷はOSスケジューラーによって分散されます。

次に、プロセスBのプロセッサアフィニティを設定して1つのCPUに制限すると、そのプロセスのすべてのスレッドもそのCPUにバインドされ、他のCPUでは実行されません。同じことをプロセスCに実行しても、一度に1つのCPUでしか実行できないため、実際の変更はありません。


2

簡潔な答え:

  1. はい、OSがサポートしていれば可能です。
  2. 現在、すべてのOSがサポートしています。

プロセスとスレッド(マルチスレッドの場合と同様)は、OSレベルの構成要素です。スケジューリングで十分な低レベルになると、これらは消えて、実行時間を取得するための実行キューイングの束スレッドしかありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.