私はstd::for_eachwith を使用しstd::execution::parて、構造のベクトルとして表される巨大な入力に対して複雑な計算を実行します。計算には、ハードウェア(ネットワークやディスクIOなど)に関連する遅延は必要ありません。これは「単なるCPU」計算です。私にとっては、ハードウェアスレッドのようにOSスレッドを増やす必要はないのは当然のことです。ただし、Visual C ++ 2019では、平均50スレッドが作成され、ハードウェアスレッドが12しかない場合でも最大500スレッド作成されることがあります。
並列スレッドを制限するが方法はにカウントされhardware_concurrencyてstd::for_eachおよびstd::execution::par、またはカウント合理的なスレッドを作成するための唯一の方法はでカスタムコードを使用することですかstd::thread?
std::for_each、<algorithm>ヘッダーのその他のアルゴリズムよりもはるかに低いレベルであることです。背後にstd::execution::parある主なアイデアは、並列コードを順次コードと同じくらい単純にすることと、最小限のコードとセマンティクスの変更で既存のアルゴリズムを並列化することです。