Bitte korrigieren Sie mein Verständnis.Hat ein Worker-Thread im Blocking-Zustand vor dem TAP/TPL-Befehl im alten Threadpool-Modell den Threadpool zurückgegeben und zurückgegeben?
Bevor das Task-basierte asynchrone Programmiermodell eingeführt wurde, funktionierte der .NET ThreadPool anders.
1) Wenn ein Thread an einem I/O Completion-Port blockierte, gab es im alten System den Anteil der CPU-Zeit an das OS, während es sich im blockierenden Zustand befand.
2) Ist mein Verständnis korrekt, dass nach der neuen Thread Pool und Task Scheduler-Implementierung, die mit TPL kam, dass jetzt ein Thread in den Thread-Pool sofort nach dem Eintritt in den Blockierungszustand zurückkehrt?
3) Und dass im alten Regime der blockierte Thread nicht zum Thread-Pool zurückkehrte und daher unnötigen Overhead der Thread-Injektion verursachte, der hätte vermieden werden können?
Nein, weder die ThreadPool-Implementierung noch der Scheduler wurden geändert. Und ThreadPool.SetMin/MaxThreads() nahm immer ein Argument * completionPortThreads * . Und TPL belegt keinen Thread, während I/O läuft. TAP hat die Callback-Methode viel einfacher geschrieben, der C# -Compiler schreibt sie jetzt für Sie. –
Danke. Ich denke, der Hauptteil meiner Frage ist: Früher, wenn ein Thread-Pool-Thread im Sperrzustand war, könnte er für etwas anderes verwendet worden sein? Wenn es in den Pool zurückkehrt, könnte es auch seinen Ausführungskontext an einen anderen Ort ausgelagert und für etwas anderes verwendet worden sein. Welche realen Kosten hat TPL dann eingespart?Wenn es jedoch nicht für etwas anderes verwendet werden kann, während es blockiert ist, hat die * task * -Abstraktion einen echten Vorteil, und wenn der Benutzer nicht über den Thread als Arbeitseinheit nachdenkt, kann nun jeder Thread Arbeit von anderen stehlen. –
Ein paar Vorlesungen in der Architektur von Betriebssystemen und etwas Lesen von Managed Threading vom MSDN haben mir gezeigt, wie dumm ich bin, diese unvernünftige, ungebildete Frage zu stellen und die Hybris zu haben (es war nicht Hybris, sondern blinde Ignoranz)) um mit @HansPassant zu sprechen, der wie der Guy de Maupassant der Low-Level-Programmierung ist. Ich stehe in der Ferne, korrigiert. –