Programmering

Forstå trådbassenger i C #

En tråd er den minste utførelsesenheten i en prosess. Et trådbasseng består av et antall tråder, eller en samling tråder for å være presis, og den kan brukes til å utføre flere aktiviteter i bakgrunnen.

Hvorfor skal jeg bruke trådbassenger?

Tråder er dyre ettersom de bruker mye ressurser i systemet ditt for initialisering, bytte av kontekst og frigjøre ressursene de bruker. Normalt, når en tråd utfører en I / O-operasjon (filhåndtering, databasedrift eller tilgang til nettverksressursene osv.), Blir tråden blokkert av operativsystemet til I / O-operasjonen er fullført. Tråden vil gjenoppta CPU-operasjonen etter at I / O-operasjonen er fullført.

Et trådbasseng er et godt valg når du vil begrense antall tråder som kjører på et gitt tidspunkt og vil unngå overhead for å opprette og ødelegge tråder i applikasjonen din. Det er også et godt valg når du har mange oppgaver i applikasjonen din som må utføres enten parallelt eller samtidig, og du vil forbedre applikasjonens respons ved å unngå kontekstbrytere. For å opprette en trådgruppe kan du dra nytte av klassen System.Threading.ThreadPool.

Følgende kodebit viser hvordan du kan angi minimum antall tråder i trådgruppen.

ThreadPool.SetMinThreads (50, 50);

Vær imidlertid oppmerksom på at når en langvarig oppgave er i utførelse, kan trådbassengtråden bli blokkert i lang tid. For å gjøre saken verre, kan innkommende forespørsler som er avhengige av trådene fra trådbassenget, være på vent eller til og med bli avvist primært fordi trådgruppen kanskje ikke har tilgjengelige tråder for å håndtere en innkommende forespørsel. Et trådbasseng er heller ikke et godt valg når du har tråder som avviker i prioriteringene dine, eller du må kanskje avbryte en tråd for tidlig. En for tidlig avslutning av en tråd innebærer at tråden har blitt stoppet kraftig før omsetningstiden er over.

Hvordan fungerer et trådbasseng?

I hovedsak oppretter du en samling tråder når du arbeider med trådbassenger, og lagrer dem i et trådbasseng før du bruker trådene i applikasjonen din. Når og når du trenger en tråd, vil du bruke disse trådene på nytt i stedet for å opprette nye tråder hver gang applikasjonen trenger å bruke en tråd.

Så applikasjonen vil sende en forespørsel til trådgruppen for å få en tråd fra den, utføre aktiviteter ved hjelp av tråden og deretter returnere tråden tilbake til trådgruppen når du er ferdig. Trådbassenger er nyttige i situasjoner når du har flere oppgaver å utføre enn du kan lage tråder (det er en grense for maksimalt antall tråder du kan opprette per prosess) i applikasjonen din.

Hvordan kan jeg optimalisere en trådgruppe?

Når en prosess starter, tildeles den en gruppe tråder av CLR. Merk at du kan konfigurere størrelsen på trådgruppen hvis du trenger det. Kjøretiden styrer trådbassenget intelligent. Når trådbassenget starter, er det bare en tråd i trådbassenget. Fra da av oppretter trådbassengbehandleren (en komponent som er ansvarlig for å administrere trådgruppen) flere tråder og lagrer dem i trådbassenget når belastningen på applikasjonen øker, dvs. applikasjonen trenger flere og flere oppgaver som skal utføres samtidig.

Antall tråder som kan være tilgjengelige i trådfeltet til et gitt tidspunkt styres av den maksimalt tillatte grensen for tråder i trådfeltet. Med andre ord varierer antall tilgjengelige tråder i trådbassenget fra tid til annen avhengig av forbruket av tråder fra applikasjonen. Så snart maksimumsgrensen (maksimalt antall tråder i trådgruppen) er nådd, oppretter applikasjonen nye tråder mye sjeldnere.

Du kan alltid angi den øvre grensen for tillatte tråder i trådbassenget hvis det er nødvendig. For å gjøre dette, bør du dra nytte av eiendommen ThreadPool.SetMaxThreads. For å angi den nedre grensen for trådene i trådgruppen, kan du bruke ThreadPool.SetMinThreads-egenskapen. Standard nedre grense for antall tråder i trådfeltet er en tråd per prosessor.

$config[zx-auto] not found$config[zx-overlay] not found