Fili leggeri, medi e pesanti

Nella programmazione di computer, un thread è un'istanza di una sequenza di codice che opera come un'unità, in genere per conto di un singolo utente, transazione o messaggio. I thread sono talvolta descritti in termini di peso, ovvero quante informazioni contestuali devono essere salvate per un dato thread in modo che possa essere riferito dal sistema durante la vita del thread.

Ad esempio, il contesto di un processo UNIX include il registro hardware, lo stack del kernel, lo stack a livello utente e così via. Il tempo richiesto per cambiare così tanto contesto, in migliaia di microsecondi, è considerato elevato, quindi un processo UNIX è considerato un thread pesante.

In alcuni kernel del sistema operativo moderno, come Mach, possono esistere più thread in un singolo spazio di indirizzi, il che diminuisce la quantità di contesto che deve essere salvato con ciascuno di essi e riduce il tempo di commutazione a centinaia di microsecondi. Questi thread a livello di kernel sono considerati thread di medio peso.

Quando tutte le operazioni di contesto e thread sono esposte a livello utente, ogni applicazione necessita solo della quantità minima di contesto salvata con essa, in modo che il cambio di contesto possa essere ridotto a decine di microsecondi. Pertanto, i thread a livello di utente sono considerati thread leggeri.