Hva er en trådpool? Hvorfor bruke trådpooler? Hvordan bruke trådpooler?
1. Hva er en trådpool?
.NET Frameworks ThreadPool-klasse tilbyr en trådpool som kan brukes til å utføre oppgaver, sende arbeidselementer, håndtere asynkron I/O, vente på vegne av andre tråder og håndtere timere. Så hva er en trådpool? Trådpoolen er faktisk en "pool" som lagrer trådobjekter, og den tilbyr noen grunnleggende metoder, som å sette minimum/maksimum antall tråder i poolen, sette metodene i kø som skal kjøres, osv. ThreadPool er en statisk klasse, så den kan brukes direkte uten å opprette objekter.
2. Hvorfor bruke trådpooler? Hva er fordelene?
Microsofts offisielle nettside sier følgende: Mange applikasjoner lager et stort antall tråder som er i dvale og venter på at hendelser skal skje. Det finnes også mange tråder som kan gå i dvale bare for å våkne opp med jevne mellomrom for å spørre om endret eller oppdatert tilstandsinformasjon. Trådpooler, som lar deg bruke tråder mer effektivt gjennom en pool av arbeidertråder administrert av systemet.
For å si det enkelt, hver ny tråd må oppta minneplass og andre ressurser, og med så mange nye tråder er mange av dem inaktive eller venter på at ressurser skal slippes. Det finnes mange tråder som bare gjør litt småarbeid periodisk, som å oppdatere data osv., som er for sløsende til å tegne, og det er sjeldent at et stort antall tråder bryter ut i faktisk programmering og så avsluttes på kort tid. Derfor ble konseptet trådpooler foreslått. Hvis applikasjonen sender en ny forespørsel til trådpoolen, aktiveres tråden i ventende tilstand og kjører oppgaven uten å opprette en ny tråd, noe som sparer mye overhead. Systemet vil automatisk ødelegge tråder bare når antall tråder når det maksimale antallet tråder. Derfor kan bruk av trådpooler unngå store kostnader for opprettelse og ødeleggelse, gi bedre ytelse og stabilitet, og for det andre kan utviklere fokusere på andre oppgaver ved å overlate tråder til systemadministrasjonen.
3. Hvordan bruker jeg trådpooler?
Faktisk er trådpooler veldig enkle å bruke, som følger
a. Sett maksimal og minimal trådpool:
ThreadPool.SetMaxThreads (int workerThreads,int completionPortThreads) Sett antall forespørsler for en pool av tråder som kan være aktive samtidig. Alle forespørsler større enn dette tallet vil forbli i kø til trådpooltråden blir tilgjengelig. Du kan også sette minimum antall tråder.
b. Legg til oppgaver i trådpoolen:
ThreadPool.QueueUserWorkItem(ny WaitCallback(metodenavn));
eller ThreadPool.QueueUserWorkItem (ny WaitCallback(metodenavn), parameter);
For eksempel, hvis maksimalt 5 tråder i trådpoolen kjører en metode 60 ganger, er den totale lønnen for 5 år som følger:
Hvis du ikke bruker trådpooling, kan det hende du må åpne 60 tråder for å kjøre Run()-metoden asynkront, noe som er bortkastet plassressurser. Nå bruker vi opptil 5 tråder, som kan kjøres på 1 sekund, og effektiviteten og ytelsen er veldig god.
|