Grup de fire - Thread pool

Image
Un eșantion de grup de fire (cutii verzi) cu sarcini de așteptare (albastru) și sarcini finalizate (galben)

În programarea computerului , un pool de fire este un model de proiectare software pentru realizarea concurenței de execuție într-un program de computer. Adesea denumit și model de muncitori replicat sau model de muncitor-echipaj , un grup de fire menține mai multe fire de așteptare pentru ca sarcinile să fie alocate pentru executarea concurentă de către programul de supraveghere. Prin menținerea unui grup de fire, modelul crește performanța și evită latența în execuție datorită creării și distrugerii frecvente de fire pentru sarcini de scurtă durată. Numărul de fire disponibile este reglat la resursele de calcul disponibile pentru program, cum ar fi o coadă de sarcini paralele după finalizarea execuției.

Performanţă

Dimensiunea unui pool de fire este numărul de fire ținute în rezervă pentru executarea sarcinilor. Este de obicei un parametru reglabil al aplicației, ajustat pentru a optimiza performanța programului. Decizia dimensiunii optime a grupului de fire este crucială pentru a optimiza performanța.

Un avantaj al unui pool de fire decât crearea unui thread nou pentru fiecare sarcină este acela că overhead-ul de creare și distrugere a thread-urilor este limitat la crearea inițială a pool-ului, ceea ce poate avea ca rezultat o performanță mai bună și o stabilitate mai bună a sistemului . Crearea și distrugerea unui fir și a resurselor asociate acestuia poate fi un proces costisitor în termeni de timp. Un număr excesiv de fire în rezervă, totuși, risipește memoria, iar schimbarea contextului între firele rulabile invocă penalizări de performanță. O conexiune socket la o altă gazdă de rețea, care ar putea dura multe cicluri de procesare pentru a renunța și restabili, poate fi menținută mai eficient prin asocierea cu un fir care trăiește pe parcursul mai multor tranzacții de rețea.

Utilizarea unui pool de fire poate fi utilă chiar și pentru a lăsa deoparte timpul de pornire a firului. Există implementări ale pool-urilor de fire care fac banală lucrarea la coadă, controlul concurenței și sincronizarea firelor la un nivel mai înalt decât se poate face cu ușurință atunci când gestionăm manual firele. În aceste cazuri, beneficiile de utilizare ale performanței pot fi secundare.

De obicei, un pool de fire se execută pe un singur computer. Cu toate acestea, pool-urile de fire sunt legate conceptual de fermele de servere în care un proces master, care ar putea fi un pool de fire în sine, distribuie sarcini proceselor lucrătorilor pe diferite computere, pentru a crește capacitatea de producție globală. Problemele stânjenitoare paralele sunt extrem de supuse acestei abordări.

Numărul de fire poate fi ajustat dinamic în timpul vieții unei aplicații pe baza numărului de sarcini de așteptare. De exemplu, un server web poate adăuga fire dacă intră numeroase solicitări de pagini web și poate elimina firele atunci când aceste solicitări se reduc. Costul de a avea un grup de fire mai mare este utilizarea crescută a resurselor. Algoritmul utilizat pentru a determina când să creați sau să distrugeți thread-urile afectează performanța generală:

  • Crearea prea multor fire irosește resurse și costă timp creând firele neutilizate.
  • Distrugerea a prea multe fire necesită mai mult timp mai târziu la crearea lor din nou.
  • Crearea de fire prea lent ar putea duce la performanțe slabe ale clienților (timpi de așteptare lungi).
  • Distrugerea firelor prea lent poate duce la înfometarea altor procese de resurse.

Vezi si

Referințe

linkuri externe