Programmering

Forståelse af trådpuljer i C #

En tråd er den mindste eksekveringsenhed inden for en proces. En trådpulje består af et antal tråde eller en samling tråde for at være præcis, og den kan bruges til at udføre flere aktiviteter i baggrunden.

Hvorfor skal jeg bruge trådpuljer?

Tråde er dyre, da de bruger mange ressourcer i dit system til initialisering, skift af sammenhæng og frigivelse af de ressourcer, de optager. Normalt, når en tråd udfører en I / O-handling (filhåndtering, databasedrift eller adgang til netværksressourcer osv.), Blokeres tråden af ​​operativsystemet, indtil I / O-operationen er afsluttet. Tråden vil genoptage sin CPU-drift, når dens I / O-handling er afsluttet.

En trådpulje er et godt valg, når du vil begrænse antallet af tråde, der kører på et givet tidspunkt og ønsker at undgå omkostningerne ved at oprette og ødelægge tråde i din applikation. Det er også et godt valg, når du har mange opgaver i din applikation, der skal udføres enten parallelt eller samtidigt, og du vil gerne forbedre applikationens lydhørhed ved at undgå kontekstomskiftere. For at oprette en trådpulje kan du drage fordel af klassen System.Threading.ThreadPool.

Følgende kodestykke viser, hvordan du kan indstille det mindste antal tråde i trådpuljen.

ThreadPool.SetMinThreads (50, 50);

Bemærk dog, at når en langvarig opgave udføres, kan trådpulstråden blive blokeret i lang tid. For at gøre tingene værre kan indgående anmodninger, der afhænger af trådene fra trådpuljen, være på hold eller måske endda blive afvist primært, fordi trådpuljen muligvis ikke har tilgængelige tråde til at håndtere en indgående anmodning. En trådpulje er heller ikke et godt valg, når du har tråde, der adskiller sig i deres prioriteter, eller du skal muligvis afbryde en tråd for tidligt. En for tidlig afslutning af en tråd indebærer, at tråden er stoppet kraftigt, før dens omløbstid er forbi.

Hvordan fungerer en trådpulje?

I det væsentlige opretter du typisk en samling tråde, når du arbejder med trådpuljer, og gemmer dem i en trådpulje, inden du bruger trådene i din applikation. Efterhånden som du har brug for en tråd, vil du genbruge disse tråde i stedet for at oprette nye tråde hver gang applikationen skal bruge en tråd.

Så applikationen vil anmode trådpuljen om at få en tråd fra den, udføre aktiviteter ved hjælp af tråden og derefter returnere tråden tilbage til trådpuljen, når du er færdig. Trådpuljer er nyttige i situationer, hvor du har flere opgaver at udføre, end du kan oprette tråde (der er en grænse for det maksimale antal tråde, du kan oprette pr. Proces) i din applikation.

Hvordan kan jeg optimere en trådpulje?

Når en proces starter, tildeles den en pool af tråde af CLR. Bemærk, at du kan konfigurere størrelsen på trådpuljen, hvis du har brug for det. Runtiden styrer trådpuljen intelligent. Når trådpuljen starter, er der kun en tråd i trådpuljen. Fra da af opretter trådpoolhåndteringen (en komponent, der er ansvarlig for styring af trådpuljen) flere tråde og gemmer dem i trådpuljen, når belastningen på applikationen øges, dvs. applikationen har brug for flere og flere opgaver, der skal udføres samtidigt.

Antallet af tråde, der kan være tilgængelige i trådpuljen på et givet tidspunkt, styres af den maksimalt tilladte grænse for tråde i trådpuljen. Med andre ord varierer antallet af tilgængelige tråde i trådpuljen fra tid til anden afhængigt af anvendelsen af ​​tråde fra applikationen. Så snart den maksimale grænse (maksimalt antal tråde i trådpuljen) er nået, opretter applikationen nye tråde meget sjældnere.

Du kan altid indstille den øvre grænse for tilladte tråde i trådpuljen, hvis det er nødvendigt. For at gøre dette skal du drage fordel af egenskaben ThreadPool.SetMaxThreads. For at indstille den nedre grænse for trådene i trådpuljen kan du bruge egenskaben ThreadPool.SetMinThreads. Standard nedre grænse for antallet af tråde i trådpuljen er en tråd pr. Processor.