Wat is een threadpool? Waarom threadpools gebruiken? Hoe gebruik je threadpools?
1. Wat is een threadpool?
De ThreadPool-klasse van het .NET Framework biedt een threadpool die gebruikt kan worden om taken uit te voeren, werkitems te verzenden, asynchrone I/O te verwerken, namens andere threads te wachten en timers te verwerken. Wat is een threadpool eigenlijk? De threadpool is eigenlijk een "pool" die threadobjecten opslaat en biedt enkele basismethoden, zoals het instellen van het minimum/maximum aantal threads in de pool, het in de wachtrij zetten van de uit te voeren methoden, enzovoort. ThreadPool is een statische klasse, dus het kan direct worden gebruikt zonder objecten aan te maken.
2. Waarom threadpools gebruiken? Wat zijn de voordelen?
De officiële website van Microsoft zegt het volgende: Veel applicaties maken een groot aantal threads aan die in slaap liggen en wachten op gebeurtenissen. Er zijn ook veel discussies die in winterslaap kunnen gaan om vervolgens periodiek wakker te worden en te peilen op gewijzigde of bijgewerkte statusinformatie. Threadpools, waarmee je threads efficiënter kunt gebruiken via een pool van worker-threads die door het systeem worden beheerd.
Kort gezegd moet elke nieuwe thread geheugenruimte en andere bronnen innemen, en met zoveel nieuwe threads zijn veel daarvan inactief of wachten ze op het vrijgeven van resources. Er zijn veel threads die slechts periodiek klein werk doen, zoals data verversen, enzovoort, die te verspilling zijn om te tekenen, en het is zeldzaam dat een groot aantal threads in het echte programmeren uitbreekt en daarna binnen korte tijd eindigt. Daarom werd het concept van threadpools voorgesteld. Als de applicatie een nieuw verzoek doet aan de threadpool, wordt de thread in de wachtende status geactiveerd en voert de taak uit zonder een nieuwe thread aan te maken, wat veel overhead bespaart. Het systeem vernietigt threads automatisch alleen wanneer het aantal threads het maximale aantal threads bereikt. Daarom kunnen het gebruik van threadpools grote kosten voor creatie en vernietiging voorkomen, betere prestaties en stabiliteit bieden, en ten tweede kunnen ontwikkelaars zich op andere taken richten door threads over te dragen aan het systeembeheer.
3. Hoe gebruik ik threadpools?
Threadpools zijn zelfs heel eenvoudig te gebruiken, als volgt, als volgt
a. Stel de maximale en minimale threadpool in:
ThreadPool.SetMaxThreads (int workerThreads,int completionPortThreads) Stel het aantal verzoeken in voor een pool van threads die tegelijkertijd actief kunnen zijn. Alle verzoeken groter dan dit aantal blijven in de wachtrij totdat de threadpool-thread beschikbaar is. Je kunt ook het minimale aantal threads instellen.
b. Taken toevoegen aan de threadpool:
ThreadPool.QueueUserWorkItem(nieuwe WaitCallback(methodnaam));
of ThreadPool.QueueUserWorkItem (nieuwe WaitCallback(methodenaam), parameter);
Als bijvoorbeeld maximaal 5 threads in de threadpool een methode 60 keer uitvoeren, is het totale salaris voor 5 jaar als volgt:
Als je geen threadpooling gebruikt, moet je misschien 60 threads openen om de Run()-methode asynchroon uit te voeren, wat zonde van de ruimte is. Nu gebruiken we tot 5 threads, die in 1 seconde kunnen worden uitgevoerd, en de efficiëntie en prestaties zijn erg goed.
|