Vad är en trådpool? Varför använda trådpooler? Hur använder man trådpooler?
1. Vad är en trådpool?
.NET Frameworks ThreadPool-klass tillhandahåller en trådpool som kan användas för att utföra uppgifter, skicka arbetsobjekt, hantera asynkron I/O, vänta på andra trådar och hantera timers. Så vad är en trådpool? Trådpoolen är egentligen en "pool" som lagrar trådobjekt, och den tillhandahåller några grundläggande metoder, såsom att ställa in minsta/maxantal trådar i poolen, köa metoderna som ska köras, etc. ThreadPool är en statisk klass, så den kan användas direkt utan att skapa objekt.
2. Varför använda trådpooler? Vilka är fördelarna?
Microsofts officiella webbplats säger följande: Många applikationer skapar ett stort antal trådar som är i vilande och väntar på att händelser ska inträffa. Det finns också många trådar som kan gå i viloläge bara för att vakna upp då och då för att polla efter ändrad eller uppdaterad statusinformation. Trådpooler, som gör att du kan använda trådar mer effektivt genom en pool av arbetstrådar som hanteras av systemet.
Enkelt uttryckt måste varje ny tråd uppta minnesutrymme och andra resurser, och med så många nya trådar är många av dem vilande eller väntar på att resurser ska släppas. Det finns många trådar som bara gör lite småjobb periodvis, som att uppdatera data, etc., vilka är för slösaktiga att rita, och det är ovanligt att ett stort antal trådar bryter ut i faktisk programmering och sedan avslutas på kort tid. Därför föreslogs konceptet trådpooler. Om applikationen gör en ny förfrågan till trådpoolen aktiveras tråden i väntande tillstånd och kör uppgiften utan att skapa en ny tråd, vilket sparar mycket overhead. Systemet kommer automatiskt att förstöra trådar endast när antalet trådar når det maximala antalet trådar. Därför kan användning av trådpooler undvika stora kostnader för skapande och förstörelse, ge bättre prestanda och stabilitet, och för det andra kan utvecklare fokusera på andra uppgifter genom att överlämna trådar till systemhanteringen.
3. Hur använder jag trådpooler?
Faktum är att trådpooler är mycket enkla att använda, enligt följande
a. Sätt maximal och minimal trådpool:
ThreadPool.SetMaxThreads (int workerThreads,int completionPortThreads) Sätt antalet förfrågningar för en pool av trådar som kan vara aktiva samtidigt. Alla förfrågningar större än detta antal kommer att förbli köade tills trådpooltråden blir tillgänglig. Du kan också ställa in minsta antal trådar.
b. Lägg till uppgifter i trådpoolen:
ThreadPool.QueueUserWorkItem(ny WaitCallback(metodnamn));
eller ThreadPool.QueueUserWorkItem (ny WaitCallback (metodnamn), parameter);
Till exempel, om maximalt 5 trådar i trådpoolen kör en metod 60 gånger, är den totala lönen under 5 år följande:
Om du inte använder trådpooling kan du behöva öppna 60 trådar för att köra Run()-metoden asynkront, vilket är slöseri med resurser. Nu använder vi upp till 5 trådar, som kan köras på 1 sekund, och effektiviteten och prestandan är mycket goda.
|