Grup de fire - Thread pool
Î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
- Asincronie (programare computer)
- Model de pool de obiecte
- Model de concurență
- Grand Central Dispatch
- Extensii paralele
- Paralelizare
- Ferma server
- Arhitectură bazată pe evenimente
Referințe
linkuri externe
- „ Interogare după felie, executare paralelă și alăturare : un model de pool de fire în Java ” de Binildas CA
- „ Grupuri de fire și cozi de lucru ” de Brian Goetz
- „ A Method of Worker Thread Pooling ” de Pradeep Kumar Sahu
- „ Coadă de lucru ” de Uri Twig: demonstrație de cod C ++ a firelor grupate care execută o coadă de lucru.
- „ Regrupare de fire Windows și înlănțuire de execuție ”
- „ Smart Thread Pool ” de Ami Bar
- „ Programarea grupului de fire în cadrul .NET ” de David Carmona
- „ The Thread Pool and Asynchronous Methods ” de Jon Skeet
- „ Crearea unui pool de fire de notificare de blocare în Java ” de Amir Kirsh
- „ Programare practică cu filet cu Python: grupuri de fire și cozi ” de Noah Gift
- „ Optimizarea strategiilor grupului de fire pentru CORBA în timp real ” de Irfan Pyarali, Marina Spivak, Douglas C. Schmidt și Ron Cytron
- " Anulare amânată. Un model comportamental " de Philipp Bachmann
- „ A C ++ 17 Thread Pool for High-Performance Scientific Computing ” de Barak Shoshany