Vés al contingut

Bateria de fils d'execució

De la Viquipèdia, l'enciclopèdia lliure

Una bateria de fils d'execució (en anglès, thread pool) és un patró de programació concurrent que manté un conjunt de fils d'execució disponibles per executar tasques. En lloc de crear un fil nou cada vegada que arriba una feina i destruir-lo quan acaba, el programa envia les tasques a una cua compartida i els fils treballadors les processen a mesura que queden lliures. Aquest model redueix el cost de creació de fils i ajuda a limitar el nombre màxim d'operacions que s'executen alhora.[1]

Funcionament

[modifica]

Una bateria de fils sol tenir una cua de tasques pendents, un nombre màxim de fils i un mecanisme per retornar resultats o errors al codi que ha sol·licitat la feina. Si hi ha un fil disponible, aquest agafa una tasca i l'executa. Si tots els fils estan ocupats, les tasques noves esperen a la cua fins que un treballador queda lliure. Algunes implementacions tenen una mida fixa, mentre que altres poden crear fils addicionals quan la càrrega augmenta i eliminar-los quan tornen a estar inactius.[2]

Aquest patró és habitual en servidors, aplicacions d'escriptori i biblioteques que han de executar moltes operacions independents. És especialment útil per a tasques d'entrada/sortida bloquejant, com ara llegir fitxers, consultar serveis de xarxa o comunicar-se amb una base de dades, perquè permet que altres tasques avancin mentre una operació espera resposta. En Python, ThreadPoolExecutor proporciona una interfície d'alt nivell per executar crides de manera asíncrona amb un grup de fils.[1] El bucle d'esdeveniments d'asyncio també pot delegar funcions bloquejants en un executor mitjançant run_in_executor.[3]

Una bateria de fils no és el mateix que una bateria de processos. Els fils comparteixen memòria dins del mateix procés i solen ser adequats per solapar esperes d'E/S, mentre que els processos separats poden aprofitar millor diversos nuclis en tasques intensives en càlcul, amb més cost de comunicació.

Limitacions

[modifica]

La mida de la bateria és important. Massa pocs fils poden deixar moltes tasques esperant; massa fils poden augmentar la contenció, el consum de memòria i els canvis de context. També poden aparèixer interbloquejos si una tasca espera el resultat d'una altra que no pot començar perquè tots els fils estan ocupats. Per això, una bateria de fils s'ha de dimensionar segons el tipus de treball i els recursos disponibles.

Referències

[modifica]
  1. 1 2 «concurrent.futures — Launching parallel tasks» (en anglès). Python 3 documentation. Python Software Foundation. [Consulta: 28 maig 2026].
  2. «Executors» (en anglès). Java Platform SE 8. Oracle. [Consulta: 28 maig 2026].
  3. «Event loop — Executing code in thread or process pools» (en anglès). Python 3 documentation. Python Software Foundation. [Consulta: 28 maig 2026].