質問: スレッドとプロセス対マルチスレッドとマルチコア/マルチプロセッサ:どのようにマッピングされていますか? 私は非常に混乱していましたが、次のスレッドは私の疑問をクリアしました: マルチプロセッシング、マルチスレッド、ハイパースレッド、マルチコア ただし、ハードウェアの観点からクエリに対処します。これらのハードウェア機能がソフトウェアにどのようにマッピングされているか知りたいですか?明らかなことの1つは、multiprocessor(= mutlicpu)とmulticoreの間に違いはないことです。マルチコアの場合、すべてのcpuは1つのチップ(ダイ)にあります。したがって、マルチコア/マルチプロセッサシステムは、「同じ時間」で複数のプロセス(firefox、mediaplayer、googletalk)を実行できます(シングルプロセッサシステムでこれらのプロセスを切り替えるコンテキストとは異なります)。正しい場合。私はこれまでのところ明確です。しかし、マルチスレッドが登場すると混乱が生じます。 マルチスレッドは、並列処理の「対象」です。正しい? cpu内部のマルチスレッドに関与する要素は何ですか?図? 2つの独立したタスクの並列処理の力を活用するには、cpuの要件はどうあるべきでしょうか? スレッドのコンテキストスイッチングを言うとき。よくわかりません。その理由は、スレッドのコンテキスト切り替えが並列処理ではないためです。スレッドは「同時に」実行される必要があります。正しい? マルチスレッドの私の考えは、次のとおりです。単一のcpuを備えたシステムを検討する。プロセスがfirefoxにコンテキスト切り替えされたとき。 (仮定)firefoxの各タブはスレッドであり、すべてのスレッドは厳密に同時に実行されています。あるスレッドがしばらく実行された後、別のスレッドがコンテキスト切り替え時間に到達するまで再びかかったようにではありません。 スレッドを処理できないプロセッサでマルチスレッドソフトウェアを実行するとどうなりますか? cpuがそのようなソフトウェアをどのように処理するのですか? これまでのところすべてがうまくいけば、今の質問はどのくらいのスレッドですか?ハードウェアによって制限される必要があると思いますか?ハードウェアが2スレッドしかサポートできず、プロセスで10スレッドを開始する場合。 cpuはどのようにそれを処理しますか?長所短所?ソフトウェアエンジニアリングの観点から、さまざまなシステムのユーザーが使用するソフトウェアを開発している間に、マルチスレッド化をどのように決定すればよいでしょうか?もしそうなら、いくつのスレッド?
回答: 覚えておくべき重要なことは、論理/仮想並列処理と実/ハードウェア並列処理の分離です。平均的なosでは、システムコールが実行されて新しいスレッドが生成されます。実際に何が起こるか(別のコアにマッピングされるか、同じコア上の異なるハードウェアスレッドになるか、ソフトウェアスレッドのプールにキューイングされるか)はosに任されています。 並列処理では、マルチスレッドだけでなく、すべての方法が使用されます。 一般的に、実際の並列処理が必要な場合は、ハードウェアで実行する必要があります。 niagara を例にとると、ハードウェアで4スレッドを実行できる最大8コアがあります。 コンテキストの切り替えは、ハードウェアで並列に実行できるよりも多くのスレッドがある場合に必要です。その場合でも、連続して実行すると(1つのスレッドから次のスレッドへの切り替え)、切り替えのorderが保証されないため、それらは並行と見なされます。したがって、t0、t1、t2、t1、t3、t0、t2などのようになります。すべての意図と目的のために、スレッドは並列です。 タイムスライシング。 それはos次第です。