Programiranje

Razumevanje področij niti v jeziku C #

Nit je najmanjša enota izvrševanja v procesu. Področje niti vsebuje več niti ali, natančneje, zbirko niti in se lahko uporablja za izvajanje več dejavnosti v ozadju.

Zakaj naj uporabljam področja niti?

Niti so drage, saj porabijo veliko virov v vašem sistemu za inicializacijo, preklapljanje kontekstov in sproščanje virov, ki jih zasedajo. Ko nit izvaja operacijo V / I (obdelava datotek, delovanje zbirke podatkov ali dostop do omrežnih virov itd.), Operacijski sistem običajno blokira nit, dokler operacija V / I ni končana. Nit bo po končanem vhodno / izhodnem delovanju nadaljeval s svojim procesorjem.

Področje niti je dobra izbira, če želite omejiti število niti, ki se izvajajo v določenem trenutku, in se želite izogniti nepotrebnim ustvarjanjem in uničevanju niti v vaši aplikaciji. Dobra izbira je tudi, če imate v svoji aplikaciji veliko nalog, ki jih je treba izvajati vzporedno ali sočasno, in bi radi izboljšali odzivnost aplikacije z izogibanjem stikalom v kontekstu. Če želite ustvariti področje niti, lahko izkoristite razred System.Threading.ThreadPool.

Naslednji delček kode prikazuje, kako lahko nastavite najmanjše število niti v področju niti.

ThreadPool.SetMinThreads (50, 50);

Upoštevajte pa, da ko je dolgotrajno opravilo v teku, je nit področja niti lahko dolgo blokirana. Da bi bile stvari še hujše, so lahko dohodne zahteve, ki so odvisne od niti iz področja niti, zadržane ali celo zavrnjene predvsem zato, ker področje niti morda nima na voljo niti za obdelavo dohodne zahteve. Področje niti tudi ni dobra izbira, če imate niti, ki se razlikujejo po svojih prednostnih nalogah, ali pa boste nit morali prezgodaj prekiniti. Prezgodnja prekinitev niti pomeni, da je bila nit na silo zaustavljena, preden je čas obračanja končan.

Kako deluje nabor niti?

V bistvu pri delu s področji niti običajno ustvarite zbirko niti in jih shranite v področje niti, preden uporabite niti v svoji aplikaciji. Ko in kadar potrebujete nit, bi te niti uporabili znova in ne ustvarjali novih niti vsakič, ko mora aplikacija uporabiti nit.

Torej, aplikacija bi poslala zahtevo v nabor niti, da bi od nje dobila nit, izvedla dejavnosti z uporabo niti in nato po koncu nit vrnila nazaj v področje niti. Skupine niti so koristne v situacijah, ko morate izvesti več nalog, kot jih lahko ustvarite niti (v programu je omejitev največjega števila niti, ki jih lahko ustvarite na postopek).

Kako lahko optimiziram področje niti?

Ko se postopek zažene, mu CLR dodeli nabor niti. Upoštevajte, da lahko po potrebi nastavite velikost področja niti. Izvajalno okolje inteligentno upravlja področje niti. Ko se področje niti začne, je v področju niti samo ena nit. Od takrat naprej upravitelj področja niti (komponenta, ki je odgovorna za upravljanje področja niti) ustvari več niti in jih shrani v področje niti, ko se obremenitev aplikacije poveča, torej aplikacija potrebuje vedno več nalog za sočasno izvajanje.

Število niti, ki so lahko v katerem koli trenutku na voljo v področju niti, ureja največja dovoljena meja niti v področju niti. Z drugimi besedami, število razpoložljivih niti v področju niti se občasno spreminja, odvisno od porabe niti v aplikaciji. Takoj ko je dosežena največja omejitev (največje število niti v področju niti), aplikacija veliko redkeje ustvari nove niti.

Po potrebi lahko vedno nastavite zgornjo mejo dovoljenih niti v naboru niti. Če želite to narediti, morate izkoristiti lastnost ThreadPool.SetMaxThreads. Če želite nastaviti spodnjo mejo niti v področju niti, lahko uporabite lastnost ThreadPool.SetMinThreads. Privzeta spodnja meja števila niti v področju niti je ena nit na procesor.

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