Der Hauptbedarf für Theadpool-Threads besteht darin, kurze kleine Aufgaben zu erledigen, von denen erwartet wird, dass sie fast sofort erledigt werden. Hardware-Interrupt-Handler werden häufig in einem Stapelkontext ausgeführt, der nicht für Nicht-Kernel-Code geeignet ist. Ein Hardware-Interrupt-Handler kann jedoch feststellen, dass ein Rückruf zum Abschluss der E / A im Benutzermodus so bald wie möglich ausgeführt werden sollte. Das Erstellen eines neuen Threads zum Ausführen eines solchen Dings wäre ein massiver Overkill. Es ist viel effizienter, einige vorab erstellte Threads zu haben, die zum Ausführen von E / A-Abschlussrückrufen oder ähnlichen Dingen gesendet werden können.
Ein Schlüsselaspekt solcher Threads ist, dass, wenn E / A-Abschlussmethoden immer im Wesentlichen sofort abgeschlossen werden und niemals blockiert werden und die Anzahl solcher Threads, auf denen solche Methoden derzeit ausgeführt werden, mindestens der Anzahl der Prozessoren entspricht, der einzige Weg für jeden anderen Thread ist könnte ausgeführt werden, bevor eine der oben genannten Methoden beendet ist, wenn eine der anderen Methoden blockiert oder ihre Ausführungszeit eine normale Threading-Zeitscheibe überschreitet; Beides sollte nicht sehr oft vorkommen, wenn der Thread-Pool wie vorgesehen verwendet wird.
Wenn nicht erwartet werden kann, dass eine Methode innerhalb von etwa 100 ms nach Beginn der Ausführung beendet wird, sollte die Methode auf andere Weise als über den Hauptthreadpool ausgeführt werden. Wenn viele Aufgaben ausgeführt werden müssen, die CPU-intensiv sind, aber nicht blockiert werden, kann es hilfreich sein, sie mithilfe eines Pools von Anwendungsthreads (einer pro CPU-Kern) zu versenden, der seit der Verwendung vom "Haupt" -Threadpool getrennt ist Mehr Threads als Kerne sind kontraproduktiv, wenn nicht blockierende CPU-intensive Aufgaben ausgeführt werden. Wenn die Ausführung einer Methode jedoch eine Sekunde oder länger dauert und die meiste Zeit blockiert ist, sollte die Methode wahrscheinlich in einem dedizierten Thread ausgeführt werden und mit ziemlicher Sicherheit nicht in einem Haupt-Threadpool-Thread. Wenn ein lang laufender Vorgang durch einen E / A-Rückruf ausgelöst werden muss,