Programovanie

Pochopenie skupín vlákien v C #

Vlákno je najmenšia jednotka vykonania v rámci procesu. Fond vlákien sa skladá z niekoľkých vlákien alebo z presnej kolekcie vlákien a je možné ho použiť na vykonávanie niekoľkých činností na pozadí.

Prečo by som mal používať skupiny vlákien?

Vlákna sú drahé, pretože vo vašom systéme spotrebúvajú veľa zdrojov na inicializáciu, prepínanie kontextov a uvoľňovanie prostriedkov, ktoré obsadzujú. Normálne, keď vlákno vykonáva vstupno-výstupnú operáciu (manipulácia so súbormi, prevádzka databázy alebo prístup k sieťovým prostriedkom atď.), Vlákno je operačným systémom blokované, kým nie je operácia I / O dokončená. Vlákno obnoví svoju činnosť procesora po dokončení svojej vstupno-výstupnej operácie.

Fond vlákien je dobrou voľbou, ak chcete obmedziť počet vlákien, ktoré sú spustené v danom okamihu, a chcete sa vyhnúť réžii pri vytváraní a ničení vlákien vo vašej aplikácii. Je to tiež dobrá voľba, keď máte vo svojej aplikácii veľa úloh, ktoré je potrebné vykonať paralelne alebo súčasne a chceli by ste zlepšiť reakciu aplikácie tak, že sa vyhnete prepínačom kontextu. Ak chcete vytvoriť fond vlákien, môžete využiť výhody triedy System.Threading.ThreadPool.

Nasledujúci úryvok kódu ukazuje, ako môžete nastaviť minimálny počet vlákien v skupine vlákien.

ThreadPool.SetMinThreads (50, 50);

Upozorňujeme však, že keď sa vykonáva dlhotrvajúca úloha, vlákno fondu vlákien môže byť dlho blokované. Aby toho nebolo málo, prichádzajúce požiadavky, ktoré závisia od vlákien z fondu vlákien, môžu byť pozastavené alebo môžu byť dokonca odmietnuté primárne, pretože fond vlákien nemusí mať so sebou dostupné vlákna na spracovanie prichádzajúcej žiadosti. Fond vlákien tiež nie je dobrou voľbou, ak máte vlákna, ktoré sa líšia svojimi prioritami, alebo možno budete musieť vlákno predčasne prerušiť. Predčasné ukončenie vlákna znamená, že vlákno bolo násilne zastavené skôr, ako vyprší jeho doba obratu.

Ako funguje fond vlákien?

Pri práci s fondmi vlákien by ste v podstate mali vytvoriť kolekciu vlákien a uložiť ich do fondu vlákien pred použitím vlákien vo svojej aplikácii. Ak potrebujete vlákno, tieto vlákna by ste radšej použili znova, než aby ste vytvorili nové vlákna zakaždým, keď aplikácia potrebuje použiť vlákno.

Aplikácia by teda urobila žiadosť do fondu vlákien, aby z neho získala vlákno, vykonávala činnosti pomocou vlákna a po dokončení vlákno vrátila späť do fondu vlákien. Fondy vlákien sú užitočné v situáciách, keď máte na vykonanie viac úloh, ako môžete vytvoriť (vo svojej aplikácii je limit maximálneho počtu vlákien, ktoré môžete vytvoriť na jeden proces).

Ako môžem optimalizovať fond vlákien?

Po spustení procesu je CLR pridelená skupina vlákien. Upozorňujeme, že v prípade potreby môžete nakonfigurovať veľkosť fondu vlákien. Modul runtime inteligentne spravuje fond vlákien. Keď sa spustí oblasť vlákien, v oblasti vlákien je iba jedno vlákno. Odvtedy správca fondu vlákien (komponent zodpovedný za správu fondu vlákien) vytvára viac vlákien a ukladá ich do fondu vlákien, keď sa zvyšuje zaťaženie aplikácie, t. J. Aplikácia potrebuje viac a viac úloh, ktoré sa majú vykonávať súčasne.

Počet vlákien, ktoré môžu byť k dispozícii v skupine vlákien v danom okamihu, sa riadi maximálnym povoleným limitom vlákien v skupine vlákien. Inými slovami, počet dostupných vlákien v oblasti vlákien sa čas od času líši v závislosti od spotreby vlákien aplikáciou. Akonáhle je dosiahnutý maximálny limit (maximálny počet vlákien v oblasti vlákien), aplikácia vytvorí nové vlákna oveľa zriedkavejšie.

V prípade potreby môžete kedykoľvek nastaviť horný limit prípustných vlákien v oblasti vlákien sami. Ak to chcete urobiť, mali by ste využiť vlastnosť ThreadPool.SetMaxThreads. Na nastavenie dolnej hranice vlákien v oblasti vlákien môžete použiť vlastnosť ThreadPool.SetMinThreads. Predvolená dolná hranica počtu vlákien v oblasti vlákien je jedno vlákno na procesor.

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