実行するタスクが100あり、すべて独立した(タスクの期間中)データを使用するとします。開始するすべてのスレッドには、かなりのオーバーヘッドがかかります。したがって、コアが2つある場合は、2つのスレッドのみを開始する必要があります。これは、とにかく実行されるのはそれだけだからです。次に、両方のスレッドを実行し続けるために、これらの各スレッドにタスクをフィードする必要があります。100コアの場合、100スレッドを起動します。仕事を50倍速く終わらせることはオーバーヘッドの価値があります。
したがって、昔ながらのプログラミングでは、2つの仕事をしなければなりません。コアの数を確認する必要があります。また、スレッドが実行を継続し、コアを無駄にしないように、各スレッドにタスクをフィードする必要があります。(100コア以上の場合、これは1つのジョブになります。)
私はAppleがあなたのためにこれらの2つの厄介な仕事を引き継ぐことを提供していると信じています。
あなたの仕事がデータを共有するなら、それは物事を変えます。2つのスレッドが実行されている場合、一方が他方をブロックできます。2コアのマシンでも、3つ以上のスレッドを実行すると料金が発生します。100個のスレッドを一度に緩めることは、少なくとも2個のスレッドがブロックされない可能性を高めるため、理にかなっていることに気付く傾向があります。これにより、ブロックされた1つのタスクがスレッド内の残りのタスクを保持するのを防ぎます。スレッドのオーバーヘッドで代償を払いますが、CPU使用率が高い場合は元に戻します。
したがって、この機能は非常に便利な場合とそうでない場合があります。並列プログラミングには役立ちますが、非並列並行性(マルチスレッド)では妨げになります。