プログラムを高速化するためにマルチスレッドを使用したいのですが、どちらの方法が最適かわかりません。
10000の小さなタスクがあるとすると、そのうちの1つを完了するのにたった0.1秒しかかかりません。これで、12コアのCPUができました。これを高速化するために、12スレッドを使用したいと思います。
私の知る限り、2つの方法があります。
1.タスクプール
常に12のスレッドが実行されており、それぞれが現在の作業を終了した後、タスクプールから1つの新しいタスクを取得します。
2.個別のタスク
10000のタスクを12の部分に分割し、各スレッドが1つの部分で機能するようにします。
問題は、タスクプールを使用する場合、複数のスレッドがタスクプールにアクセスしようとすると、ロック/ロック解除に時間の無駄になることです。ただし、一部のスレッドは早く終了するため、2番目の方法は理想的ではありません。合計時間は、最も遅いスレッドによって異なります。
この種の仕事や他の最善の方法をどのように扱っているのでしょうか。ありがとうございました。
編集:10000という数字は単なる例であり、実際には1e8以上のタスクである可能性があり、タスクあたり0.1も平均時間であることに注意してください。
EDIT2:すべての回答に感謝します:]オプションの種類を知っておくのは良いことです。