WindowsAzureのワーカープロセスでTPLを使用したい。IJobをキューに追加しようとしています。これには、Runメソッドがあるため、ワーカーは次のもので構成されます。
loop get item off queue TPLを使用してIJob.Runを呼び出します。これは、非同期呼び出しです。
しかし、TPLに追加できるアイテムの最大数について少し心配していますか?必要に応じて、機能を確認するだけで、ある種の独自のTPLプールを構築できてうれしいです。
乾杯、アッシュ。
WindowsAzureのワーカープロセスでTPLを使用したい。IJobをキューに追加しようとしています。これには、Runメソッドがあるため、ワーカーは次のもので構成されます。
loop get item off queue TPLを使用してIJob.Runを呼び出します。これは、非同期呼び出しです。
しかし、TPLに追加できるアイテムの最大数について少し心配していますか?必要に応じて、機能を確認するだけで、ある種の独自のTPLプールを構築できてうれしいです。
乾杯、アッシュ。
TPLの主な目標の1つは、これについて心配する必要をなくすことです。作業をスレッドではなくタスクに分解することで、スケジューラーがこれのバランスをより適切に処理できるようになります。
スケジュールできる「タスク」の数に固定の上限はありません。これらは(デフォルトでは、デフォルトのTaskSchedulerで)ThreadPoolを使用してスケジュールされます。これは、.NET 4以降、作業に基づいてスケーリングされます。独自のプールを構築しようとしないことを強くお勧めします。デフォルトよりもうまくいく可能性はほとんどありません。そうは言っても、タスクの動作が非常に標準的でない場合は、カスタムTaskSchedulerの作成を検討することをお勧めします。
また、理想的には、タスクを「可能な限り大きく」する必要があることを認識してください。個々のタスクに関連するオーバーヘッドがあります。タスクが小さすぎると(作業の観点から)、適切な数の大きな「タスク」がある場合よりもオーバーヘッドがパフォーマンスに大きな影響を及ぼします。