Programiranje

Razumevanje področja niti .Net CLR

V ogrodju .Net je CLR odgovoren za zbiranje virov za zagnane aplikacije. Zlato niti CLR zlasti določa, kdaj naj bodo niti dodane ali odvzete. Če boste razumeli, kako to deluje, boste lažje ugotovili, kako konfigurirati aplikacijo ASP.Net za optimalno delovanje.

Področje niti CLR vsebuje dve vrsti niti - delovne niti in vrata za dokončanje V / I ali niti IOCP. To pomeni, da vaš delovni proces ASP.Net dejansko vsebuje dva področja niti: področje delovnih niti in področje niti IOCP. Ti bazeni imajo seveda različne namene.

Ko uporabljate metode, kot so Naloga, TaskFactory.StartNew, in ThreadPool.QueueUserWorkItem, izvajalno okolje izkorišča delovne niti za obdelavo. Ko v aplikaciji izvajate asinhrone V / I klice ali aplikacija dostopa do datotečnega sistema, zbirk podatkov, spletnih storitev itd., Potem izvajalno okolje uporablja niti IOCP. Upoštevajte tudi, da ima vsaka domena aplikacije svoje področje niti.

Oglejmo si podrobneje, kako te niti ustvarjamo in odstranjujemo v .Net Framework.

Strategije vbrizga niti

Področje niti .Net začne vbrizgavati nove niti, kadar koli postane število zasedenih niti enako številu konfiguriranih najmanjših niti v področju niti. Privzeta vrednost najmanjše nastavitve, ki je najmanjše številooboje worker in niti IOCP se določi glede na število procesorjev v vašem sistemu. Torej, če ima vaš sistem štiri jedra, bi imeli privzeto štiri delovne niti in štiri niti IOCP.

Področje niti .Net nato na zahtevo vbrizga dodatne delovne niti, če se uporabijo obstoječe niti in je še treba delati. Če povpraševanje po virih pade, bo področje niti začelo odnašati niti.

Izvedba naslednjega delčka kode bi prikazala število logičnih procesorjev v vašem sistemu in najmanjše število razpoložljivih niti delavcev in IOCP.

statična praznina Main (string [] args)

{

int minimumWorkerThreadCount, minimumIOCThreadCount;

int logicProcessorCount = System.Environment.ProcessorCount;

ThreadPool.GetMinThreads (ven minimumWorkerThreadCount, ven minimumIOCThreadCount);

Console.WriteLine (“Število procesorjev:“ + logicProcessorCount);

Console.WriteLine (“Najmanjše število delovnih niti:“ + minimumWorkerThreadCount);

Console.WriteLine (“Najmanjše število niti IOCP:“ + minimumIOCThreadCount);

Console.Read ();

}

Področje niti .Net upravlja niti z vgrajeno hevristiko. Sprejete strategije vključujejo izogibanje stradanju in algoritem za plezanje. V prejšnjem primeru področje niti .Net še naprej dodaja delovne niti, če pri elementih v čakalni vrsti ni vidnega napredka. V slednjem primeru skupek niti .Net poskuša povečati pretočnost z uporabo čim manj niti.

Področje niti .Net vbrizga ali odstrani niti v intervalih po 500 milisekund ali ko nit postane prosta, kar nastopi prej. Zdaj na podlagi povratnih informacij, ki so na voljo izvajalnemu okolju, področje niti .Net odstrani niti ali doda niti, da poveča pretočnost. Če dodajanje niti ne poveča pretočnosti, nit odnese. To je CLR-jeva tehnika plezanja v hrib v akciji.

Zdaj predpostavimo, da aplikacijo ASP.Net izvajate v IIS in ima vaš spletni strežnik skupno štiri CPU. Predpostavimo, da je v določenem trenutku obdelanih 24 zahtev. Privzeto bi izvajalno okolje ustvarilo štiri niti, ki bi bile na voljo za servisiranje prvih štirih zahtev. Ker ne bo dodanih dodatnih niti, dokler ne mine 500 milisekund, bo ostalih 20 zahtev treba čakati v čakalni vrsti. Po preteku 500 milisekund se ustvari nova nit.

Kot lahko vidite, bo za dohitevanje delovne obremenitve potrebnih veliko 500ms intervalov. To je dober razlog za uporabo asinhronega programiranja. Z asinhronim programiranjem niti med obdelavo zahtev niso blokirane, zato bi se štiri niti skoraj sprostile.

Priporočene nastavitve niti

Glede na to, kako deluje področje niti .Net in o tem, o čemer smo že razpravljali, je močno priporočljivo, da spremenite najmanjšo vrednost konfiguracije - privzeto vrednost - za niti delavcev in IOCP. Če želite to narediti v ASP.Net, spremenite minWorkerThit in minIoThred nastavitve pod konfiguracijski element v datoteki machine.config v vašem sistemu.

minIoThreads = "tukaj vnesite želeno vrednost" />

Najmanjše konfiguracijske vrednosti za niti delavcev in IOCP lahko nastavite na katero koli vrednost med eno in 50. Dober pristop je, da se v uporabniškem načinu izvleče proces delovnega procesa IIS (W3wp.exe) in nato uporabi ! threadpool ukaz za poročanje o skupnem številu delovnih niti. Ko poznate to vrednost, jo preprosto razdelite na število procesorskih jeder v vašem sistemu, da določite najmanjše nastavitve niti delavca in niti IOCP. Če je na primer skupno število delovnih niti 100 in imate v sistemu štiri procesorje, lahko nastavite najmanjše vrednosti za niti delavcev in IOCP na 25.

Če želite spremeniti privzete minimalne nastavitve niti zunaj ASP.Net, lahko uporabite ThreadPool.SetMinThreads () metoda.

Z namenom boljšega upravljanja niti in izboljšane zmogljivosti je bilo področje niti CLR izboljšano z vsako različico CLR. Kot primer, z .Net Framework 4 je CLR pridobil algoritme za krajo niti in podporo za sočasnost in vzporednost. Z vsako novo različico CLR je področje niti .Net pametnejše pri optimizaciji pretočnosti z ustvarjanjem in uničevanjem niti po potrebi. Medtem boste želeli eksperimentirati z različnimi minimalnimi nastavitvami niti, da boste v aplikaciji .Net dosegli najboljše rezultate.

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