2

私は並列プログラミングに比較的慣れておらず、異なるスレッドでバックグラウンド プロセスを実行する必要があります。

シナリオは次のとおりです。何かが原因で最初のバックグラウンド プロセスが実行されます。完了するまでに最大 45 秒かかる場合があります (たとえば)。一方、最初のバックグラウンド プロセスが実行された後の任意の時点で、別のイベントが発生し、2 番目のバックグラウンド プロセスが実行されます。たとえば、20 秒後です。最初のプロセスが完了するまで 25 秒以上待ちたくありません。その 2 番目のプロセスを別のスレッドですぐに実行したい。ただし、拍車をかけることができるスレッドの数も制限したいと考えています。

BackgroundWorker オブジェクトなどを使用して、ある種のキュー クラスを作成する必要がありますか? このシナリオの最善のアプローチは何でしょうか?

4

1 に答える 1

2

おそらく最善の策は、Task Parallel Library を使用してこれを達成することでしょう。スレッドをスピンアップしてタスクを実行する代わりに、Task.Run() などを使用して新しいタスクを開始します。

Task Parallel Library は、TaskScheduler を使用してスレッド プールでタスクを実行します。TaskScheduler は、スレッド プール内のスレッド数を最適化して、スループットを向上させようとします。TaskSchedule はあるタスクから次のタスクにスレッドを再利用するため、スレッド プール内のスレッド数を制限する必要はほとんどありません。

一般的な TaskScheduler の詳細については、http://msdn.microsoft.com/en-us/library/dd997402.aspx を参照して ください。

スレッド数を制限する必要があることが確実な場合は、TaskScheduler クラスを拡張できます: http://msdn.microsoft.com/en-us/library/ee789351.aspx

于 2013-05-09T16:30:43.037 に答える