Hvad er en trådpool? Hvorfor bruge trådpools? Hvordan bruger man trådpools?
1. Hvad er en trådpulje?
.NET Frameworks ThreadPool-klasse tilbyder en trådpool, der kan bruges til at udføre opgaver, sende arbejdsopgaver, håndtere asynkron I/O, vente på vegne af andre tråde og håndtere timere. Så hvad er en trådpulje? Trådpoolen er faktisk en "pool", der gemmer trådobjekter, og den tilbyder nogle grundlæggende metoder, såsom at sætte minimums/maksimum antal tråde i poolen, kø for metoder, der skal udføres osv. ThreadPool er en statisk klasse, så den kan bruges direkte uden at oprette objekter.
2. Hvorfor bruge trådpools? Hvad er fordelene?
Microsofts officielle hjemmeside siger følgende: Mange applikationer opretter et stort antal tråde, der er i dvale og venter på, at begivenheder skal finde sted. Der er også mange tråde, der kan gå i dvale bare for at vågne op med jævne mellemrum og spørge om ændret eller opdateret statusinformation. Trådpuljer, der gør det muligt at bruge tråde mere effektivt gennem en pulje af arbejdstråde, der administreres af systemet.
For at sige det enkelt, skal hver ny tråd optage hukommelsesplads og andre ressourcer, og med så mange nye tråde er mange af dem inaktive eller venter på, at ressourcer frigives. Der er mange tråde, der kun laver lidt småt arbejde periodisk, såsom at opdatere data osv., som er for spildte at tegne, og det er sjældent, at et stort antal tråde bryder ud i faktisk programmering og så slutter på kort tid. Derfor blev konceptet trådpools foreslået. Hvis applikationen laver en ny anmodning til trådpoolen, aktiveres tråden i ventende tilstand og udfører opgaven uden at oprette en ny tråd, hvilket sparer meget overhead. Systemet vil automatisk ødelægge tråde først, når antallet af tråde når det maksimale antal tråde. Derfor kan brug af trådpools undgå store omkostninger til oprettelse og destruktion, give bedre ydeevne og stabilitet, og for det andet kan udviklere fokusere på andre opgaver ved at overlade tråde til systemadministrationen.
3. Hvordan bruger jeg trådpools?
Faktisk er trådpuljer meget simple at bruge, som følger
a. Sæt maksimal og minimal trådpulje:
ThreadPool.SetMaxThreads (int workerThreads,int completionPortThreads) Indstil antallet af forespørgsler for en pulje af tråde, der kan være aktive samtidig. Alle anmodninger over dette antal forbliver i kø, indtil trådpooltråden bliver tilgængelig. Du kan også sætte det minimale antal tråde.
b. Tilføj opgaver til trådpuljen:
ThreadPool.QueueUserWorkItem(ny WaitCallback(metodenavn);
eller ThreadPool.QueueUserWorkItem (ny WaitCallback(metodenavn), parameter);
For eksempel, hvis maksimalt 5 tråde i trådpuljen udfører en metode 60 gange, er den samlede løn for 5 år som følger:
Hvis du ikke bruger trådpooling, kan det være nødvendigt at åbne 60 tråde for at køre Run()-metoden asynkront, hvilket er spild af pladsressourcer. Nu bruger vi op til 5 tråde, som kan udføres på 1 sekund, og effektiviteten og ydeevnen er meget god.
|