たとえば、2つの異なるプロセッサコアで実行される2つの異なるスレッドを使用するプログラムを作成するなど、マルチコアプロセッサ上のスレッドを試してみたいと思います。
ただし、スレッドがどのレベルで異なるコアに割り当てられるかは明確ではありません。次のシナリオを想像できます(オペレーティングシステムとプログラミング言語の実装に依存)。
- スレッドの割り当ては、オペレーティングシステムによって管理されます。スレッドはOSシステムコールを使用して作成され、プロセスがマルチコアプロセッサで実行されると、OSは異なるコアに異なるスレッドを自動的に割り当て/スケジュールしようとします。
- スレッドの割り当ては、プログラミング言語の実装によって管理されます。スレッドを異なるコアに割り当てるには特別なシステムコールが必要ですが、プログラミング言語の標準スレッドライブラリは、その言語の標準スレッド実装を使用するときにこれを自動的に処理します。
- スレッドの割り当ては明示的にプログラムする必要があります。私のプログラムでは、使用可能なコアの数を検出し、ライブラリ関数などを使用して異なるスレッドを異なるコアに割り当てるために、明示的なコードを記述する必要があります。
質問をより具体的にするために、WindowsまたはLinux上のJavaまたはC ++でマルチスレッドアプリケーションを作成したと想像してください。マルチコアプロセッサで実行すると、アプリケーションが魔法のように複数のコアを認識して使用しますか(すべてがオペレーティングシステムまたは標準のスレッドライブラリによって管理されるため)、または複数のコアを認識するためにコードを変更する必要がありますか?