2

ここから

.NET Framework は、スレッド プール内のワーカー スレッドごとにローカル タスク キューを提供します。アプリケーションのさまざまな部分に独自の作業キューを与えると、中央のボトルネックを回避するのに役立ちます (グローバル キューにアクセスしないことによって)。

ここに画像の説明を入力

これらのキューは、通常のスレッドではなく、ワーカー スレッドからの新しいタスク用であると想定しています。

質問 :

しかし、(各ワーカー スレッドの) キューが LIFO 方式でローカル タスクを実行しているのはなぜですか? 公平性はどこにありますか?先にキューに入れられたタスクは、先に実行する必要があります (FIFO)。

何が欠けていますか?

4

1 に答える 1

3

キューに入れられたばかりのタスクは、メモリのワーキング セットがまだ CPU キャッシュに残っている可能性があります (たとえば、並べ替える配列の一部を再帰的にキューに入れるクイック ソート)。LIFO はキャッシュの再利用を促進し、公平性を低下させます。しかし、TPL はとにかく公平性を保証するものではありません。それを必要とするアプリはほとんどありません。

于 2013-08-21T08:42:49.077 に答える