Was ist ein Threadpool? Warum Threadpools verwenden? Wie verwendet man Threadpools?
1. Was ist ein Threadpool?
Die ThreadPool-Klasse des .NET Frameworks stellt einen Threadpool bereit, der zum Ausführen von Aufgaben, zum Senden von Arbeitsobjekten, zur Verwaltung asynchroner I/O, zum Warten im Auftrag anderer Threads und zur Verwaltung von Timern verwendet werden kann. Was ist also ein Threadpool? Der Thread-Pool ist tatsächlich ein "Pool", der Thread-Objekte speichert und einige grundlegende Methoden bereitstellt, wie zum Beispiel das Festlegen der Mindest- bzw. Maximalanzahl von Threads im Pool, das Warteschlangen der auszuführenden Methoden usw. ThreadPool ist eine statische Klasse, daher kann sie direkt verwendet werden, ohne Objekte zu erstellen.
2. Warum Thread-Pools verwenden? Was sind die Vorteile?
Die offizielle Website von Microsoft sagt Folgendes: Viele Anwendungen erstellen eine große Anzahl von Threads, die schlafen und auf Ereignisse warten. Es gibt auch viele Threads, die in den Winterschlaf gehen, nur um regelmäßig aufzuwachen und nach geänderten oder aktualisierten Zustandsinformationen abzufragen. Thread-Pools, die es ermöglichen, Threads effizienter durch einen Pool von Worker-Threads zu nutzen, die vom System verwaltet werden.
Kurz gesagt: Jeder neue Thread muss Speicherplatz und andere Ressourcen belegen, und bei so vielen neuen Threads sind viele davon inaktiv oder warten darauf, dass Ressourcen freigegeben werden. Es gibt viele Threads, die nur gelegentlich kleine Arbeiten erledigen, wie das Auffrischen von Daten usw., die zu verschwenderisch sind, um sie zu zeichnen, und es ist selten, dass eine große Anzahl von Threads in der eigentlichen Programmierung herausbricht und dann in kurzer Zeit endet. Daher wurde das Konzept der Thread-Pools vorgeschlagen. Wenn die Anwendung eine weitere Anfrage an den Threadpool stellt, wird der Thread im ausstehenden Zustand aktiviert und führt die Aufgabe aus, ohne einen neuen Thread zu erstellen, was viel Overhead spart. Das System vernichtet Threads automatisch nur, wenn die maximale Anzahl der Threads erreicht ist. Daher können die Nutzung von Thread-Pools hohe Kosten für Erstellung und Zerstörung vermeiden, bessere Leistung und Stabilität bieten, und zweitens können sich Entwickler auf andere Aufgaben konzentrieren, indem sie Threads an das Systemmanagement übergeben.
3. Wie benutze ich Threadpools?
Tatsächlich sind Thread-Pools sehr einfach zu bedienen, wie folgt
a. Setzen Sie den maximalen und minimalen Threadpool:
ThreadPool.SetMaxThreads (int workerThreads,int completionPortThreads) Stellen Sie die Anzahl der Anfragen für einen Pool von Threads fest, die gleichzeitig aktiv sein können. Alle Anfragen größer als diese Anzahl bleiben in der Warteschlange, bis der Threadpool-Thread verfügbar wird. Du kannst auch die Mindestanzahl der Threads festlegen.
b. Aufgaben zum Threadpool hinzufügen:
ThreadPool.QueueUserWorkItem(neuer WaitCallback(Methodenname));
oder ThreadPool.QueueUserWorkItem (neuer WaitCallback(Methodenname), Parameter);
Wenn zum Beispiel maximal 5 Threads im Threadpool eine Methode 60-mal ausführen, beträgt das Gesamtgehalt für 5 Jahre wie folgt:
Wenn du kein Thread-Pooling verwendest, musst du möglicherweise 60 Threads öffnen, um die Run()-Methode asynchron auszuführen, was eine Verschwendung von Speicherressourcen ist. Jetzt verwenden wir bis zu 5 Threads, die in 1 Sekunde ausgeführt werden können, und Effizienz und Leistung sind sehr gut.
|