Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 26065|Răspunde: 2

[Sursă] O scurtă analiză a utilizării pool-ului de fire .net/C# ThreadPool

[Copiază linkul]
Postat pe 21.06.2017 09:43:20 | | | |
Ce este un pool de fire? De ce să folosești pool-uri de fire? Cum să folosești pool-urile de fire?

1. Ce este un pool de fire?

        Clasa ThreadPool a .NET Framework oferă un pool de fire care poate fi folosit pentru a executa sarcini, a trimite elemente de lucru, a gestiona I/O asincron, a aștepta în numele altor fire și a gestiona temporizatoarele. Deci, ce este un pool de fire? Pool-ul de fire este de fapt un "pool" care stochează obiecte de fire și oferă câteva metode de bază, cum ar fi setarea numărului minim/maxim de fire de execuție în pool, punerea la coadă a metodelor ce urmează să fie executate etc. ThreadPool este o clasă statică, deci poate fi folosită direct fără a crea obiecte.

2. De ce să folosești pool-uri de fire? Care sunt beneficiile?

        Site-ul oficial Microsoft spune următoarele: Multe aplicații creează un număr mare de fire de discuție care sunt în repaus, așteptând să apară evenimente. Există, de asemenea, multe fire care pot intra în hibernare doar pentru a se trezi periodic și a verifica informații despre starea schimbată sau actualizată. Pool-uri de fire, care îți permit să folosești firele mai eficient printr-un pool de fire de lucru gestionat de sistem.

        Pe scurt, fiecare fir nou trebuie să ocupe spațiu de memorie și alte resurse, iar cu atât de multe fire noi, multe dintre ele sunt inactive sau așteaptă eliberarea resurselor. Există multe fire care fac doar câteva lucrări mici periodic, cum ar fi reîmprospătarea datelor etc., care sunt prea risipitoare pentru a fi desenate, iar este rar ca un număr mare de fire să izbucnească în programare propriu-zisă și apoi să se termine într-o perioadă scurtă de timp. Prin urmare, a fost propus conceptul de pool-uri de fire. Dacă aplicația face o altă cerere către pool-ul de fire, firul aflat în starea de așteptare este activat și execută sarcina fără a crea un fir nou, ceea ce economisește multă suprasolicitare. Sistemul va distruge automat firele de execuție doar când numărul de fire atinge numărul maxim de fire. Prin urmare, folosirea pool-urilor de fire poate evita costuri mari de creare și distrugere, poate avea performanță și stabilitate mai bune, iar în al doilea rând, dezvoltatorii se pot concentra pe alte sarcini predând firele către managementul sistemului.


3. Cum folosesc pool-urile de fire?

De fapt, pool-urile de fire sunt foarte simple de folosit, după cum urmează

a. Setează pool-ul maxim și minim de fire:

ThreadPool.SetMaxThreads (int workerThreads,int completionPortThreads)
Setează numărul de cereri pentru un pool de fire care pot fi active în același timp. Toate cererile mai mari de acest număr vor rămâne în coadă până când firul din pool de fire devine disponibil. Poți seta și numărul minim de fire.

b. Adaugă sarcini în pool-ul de fire:

ThreadPool.QueueUserWorkItem(noul WaitCallback(numele metodei));

sau
ThreadPool.QueueUserWorkItem (noul WaitCallback(numele metodei), parametru);

De exemplu, dacă maximum 5 fire din pool-ul de fire execută o metodă de 60 de ori, salariul total pe 5 ani este următorul:



Dacă nu folosești pooling de fire, s-ar putea să fie nevoie să deschizi 60 de fire pentru a executa metoda Run() asincron, ceea ce este o risipă de resurse de spațiu. Acum folosim până la 5 fire de execuție, care pot fi executate în 1 secundă, iar eficiența și performanța sunt foarte bune.





Precedent:Cod Full Screen Baidu Map (cod full screen div)
Următor:Notificarea ilegală de blocare a accesului de către Alibaba Cloud
 Proprietarul| Postat pe 21.06.2017 09:47:12 |

Pool-urile de fire au aceste avantaje:

1. În multi-threading, pool-ul de fire poate reduce numărul de fire pe care le creăm și poate reutiliza rezonabil firele din pool-ul de fire. Pentru că firele cu fire din pool-ul de fire sunt într-o stare de așteptare pentru a fi atribuite.

2. Nu este nevoie să gestionezi și să întreții firele cu durată de viață scurtă, nu este nevoie să le aloci resurse la crearea lor și să eliberezi resurse după ce își finalizează sarcinile.

3. Pool-ul de fire va optimiza firele din pool în funcție de caracteristicile curente ale sistemului.

Dezavantaje ale pool-urilor de fire:

După ce predăm sarcina pool-ului de fire pentru a o finaliza, nu putem controla prioritatea firului, să setăm unele nume ale firelor și alte informații. [Dar putem adăuga un strat pentru a rafina asta înainte de a-l pune în pool-ul de fire]

Postat pe 06.12.2017 11:28:49 |
Marcează-l mai întâi, ca să poți învăța mai târziu
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com