Einfache Beschreibung von Worker- und I / O-Threads in .NET

Es ist sehr schwer, eine detaillierte, aber einfache Beschreibung von Worker- und E / A-Threads in .NET zu finden

Was ist mir in Bezug auf dieses Thema klar (aber möglicherweise nicht technisch präzise):

Arbeitsthreads sind Threads, diesollte die CPU für ihre Arbeit einsetzen;I / O-Threads (auch "Completion Port-Threads" genannt)sollte Setzen Sie Gerätetreiber für ihre Arbeit ein und tun Sie im Wesentlichen nichts. Überwachen Sie nur den Abschluss von Nicht-CPU-Vorgängen.

Was ist nicht klar:

Obwohl die Methode ThreadPool.GetAvailableThreads die Anzahl der verfügbaren Threads beider Typen zurückgibt, scheint es keine öffentliche API zu geben, um die Arbeit für den E / A-Thread zu planen. Sie können Worker-Thread nur manuell in .NET erstellen?Es scheint, dass ein einzelner E / A-Thread mehrere E / A-Vorgänge überwachen kann. Ist es wahr? Wenn ja, warum verfügt ThreadPool standardmäßig über so viele verfügbare E / A-Threads?In einigen Texten habe ich diesen Rückruf gelesen, der nach Abschluss der E / A-Operation durch den E / A-Thread ausgelöst wird. Ist es wahr? Ist das nicht ein Job für Worker-Thread, wenn man bedenkt, dass dieser Rückruf ein CPU-Vorgang ist?Genauer gesagt: Führen Benutzer-E / A-Threads für asynchrone ASP.NET-Seiten aus? Was genau ist der Leistungsvorteil beim Wechseln der E / A-Arbeit zu einem separaten Thread, anstatt die maximale Anzahl von Arbeitsthreads zu erhöhen? Liegt es daran, dass ein einzelner E / A-Thread mehrere Vorgänge überwacht? Oder macht Windows eine effizientere Kontextumschaltung, wenn E / A-Threads verwendet werden?