web-dev-qa-db-ja.com

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

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

9
NimsDotNet

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

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

14
Majenko

オペレーティングシステムに関する私の限られた知識から、everyプロセスには少なくとも1つのスレッドがあり、プロセス自体ではなく、これらのスレッドがスケジュールされると思います。プロセスは、プログラムとそれが実行するように設定したスレッドに関する情報を保持するだけです。このようにして、シングルスレッドアプリケーションはマルチスレッドアプリケーションと同じ扱いを受けますが、マルチスレッドアプリケーションはリソースをより適切に使用できます。

たとえば、それぞれ2つのスレッドと1つのスレッドアプリケーションを持つ2つのプロセスがあり、すべてがデュアルコアプロセッサ(またはデュアル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でしか実行できないため、実際の変更は発生しません。

7
Mokubai

短い答え:

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

プロセスとスレッド(マルチスレッドの場合のように)はOSレベルの構造です。スケジューリングで十分に低いレベルになると、これらは消え、実行時間を取得するための実行キューのスレッドがたくさんあります。

2
Mr Alpha