7

PLINQ AsParallel()の一部を実行することは可能ですか?他よりも優先度の低いクエリですか?(または他よりも優先度の高いものもあります)これはPLinqで可能ですか、それともPLINQを避けて、すべてを自分で行う必要がありますか?

編集/更新:

電話をかけることは可能でしょうか

Thread.Sleep(0)

低い優先度をアーカイブしたい場合、並列実行メソッド内で?それとも、それは非常に悪い習慣/ハックですか?

4

2 に答える 2

5

残念ながら、これはPLINQでは直接不可能です。

カスタムTaskSchedulerを作成することにより、残りのほとんどのタスク並列ライブラリでこれを実行できます。Parallel.Forこれにより、またはを使用するときにカスタムの「優先度」を設定できますForEach

ただし、PLINQにはTaskSchedulerからの非常に厳密な保証が必要であり、これを公開すると非常に問題が発生することが懸念されるため、TaskSchedulerをカスタマイズする機能はPLINQでは提供されませんでした。


編集/更新:

電話をかけることは可能でしょうか

Thread.Sleep(0)

これにより優先度が「低く」なりますが、残念ながら、特にPLINQと組み合わせると、独自の問題が発生します。これにより、ThreadPoolスレッドで「スリープ」状態になるため、ThreadPoolでスレッドが不足する可能性があります。

さらに、これには根本的な問題があります。PLINQはクエリを処理するように設計および意図されており、処理用には設計されていません。フロー構造を制御するための論理コードの導入は、PLINQの背後にある理論に反しており、特にデフォルトのパーティショニングを使用している場合は、予期しないパフォーマンスへの影響を引き起こす可能性があります。

于 2011-03-04T18:13:31.873 に答える
2

AsParallel非常に高レベルのAPIです。PriorityThreadを使用して何が起こっているかをきめ細かく制御したい場合は、実際にsを使用する必要があります

于 2011-03-04T18:12:31.227 に答える