2016-04-04 6 views
0

私はスケーラビリティの高いアプリケーションを設計しています。共通のキューからタスクを取得して処理する多くの処理ノードがあります。ThreadPoolバックログのキューに入れられたアイテムの数を知る方法

私の考えは、タスクキューから読み込んだすべてのノードにスレッドを持ち、作業を開始するタスクを開始することです。

私の問題は、ノードの現在の負荷ではなく、タスクを作成するスレッドの速度だけに依存するため、すべてのノードで待ち行列に入れられたタスクの数を制限する方法です。 ThreadPoolのキューに入れられたアイテムの数を確認するにはどうすればよいですか? 私はどのようにして公平な仕事を分配できますか?

お時間をいただきありがとうございます。

+1

[this](http://stackoverflow.com/questions/4410959/how-can-i-determine-the-number-of-items-in-threadpool-queue)を見てください – Zero

+0

どういう意味ですか? 「ノードを処理する」とは?それらが単一の共有メモリシステム内の単なるプロセッサであれば、タスクパラレルライブラリのデフォルトのスケジューラに依存する必要があります。タスクスケジューラはこれらの問題をすべて処理します。 – Douglas

+0

セマフォ/スリムを使用してください。タスクを開始する前にWait()を呼び出し、タスクが完了したらRelease()を呼び出します。コンストラクターには未許可のタスクの数が指定されています。 –

答えて

0

最初に共通のキューからタスクを作成するには、Interlocked.Increment変数QueuedTaskCountを使用する必要があります。開始時の各タスクは、Interlocked.Decrementに同じ変数を設定する必要があります。変数QueuedTaskCountには、キューに入れられたタスクの数が含まれるようになりました。

関連する問題