Definizione: thread
Un thread (abbreviazione di thread of execution, in italiano filo dellโesecuzione) รจ lโunitร granulare in cui un processo puรฒ essere suddiviso e che puรฒ essere eseguito a divisione di tempo (cioรจ assegnando a ognuno una determinata porzione di tempo in cui poter essere eseguito) o in parallelo ad altri thread da parte del processore. Puรฒ essere eseguito a livello utente o a livello kernel.
Definizione: thread a livello utente
Definizione: thread a livello kernel
Un thread si dice che รจ a livello kernel quando viene gestito unicamente dal sistema operativo e, in particolare, dal kernel.
1 - Differenza tra processo e thread
I termini processo e thread, nonostante a volte vengano usati in maniera interscambiabile, in realtร indicano due cose distinte:
- Un processo รจ unโistanza di un programma in esecuzione, con risorse e uno spazio di memoria proprio. Ogni processo รจ indipendente dagli altri e dispone di un proprio spazio di indirizzamento nella memoria, il che significa che i dati di un processo non sono condivisibili direttamente con quelli di un altro processo (salvo meccanismi appositi, come la memoria condivisa o la comunicazione inter-processo).
- Un thread รจ unโunitร di esecuzione allโinterno di un processo. Tutti i thread di un processo condividono lo stesso spazio di memoria e le stesse risorse del processo che li contiene. Un singolo processo puรฒ avere uno o piรน thread (concetto di multithreading).
Il termine inglese thread rende bene lโidea, in quanto si rifร visivamente al concetto di fune metallica composta da vari fili attorcigliati: se la fune รจ il processo in esecuzione, allora i singoli fili che la compongono sono i thread.

1.1 - Esempio pratico
Ecco un esempio pratico della differenza tra processo e thread.
Immagina di avviare unโapplicazione come, per esempio, un editor di testo. Quando lโapplicazione viene avviata, il sistema operativo crea un processo con il suo spazio di memoria. Se apri una seconda istanza dellโeditor, viene creato un nuovo processo.
Allโinterno dellโeditor di testo, ci possono essere piรน thread: uno che gestisce la visualizzazione del testo, un altro che gestisce il salvataggio automatico, e un altro che risponde ai comandi dellโutente. Tutti questi thread lavorano contemporaneamente e condividono lo stesso spazio di memoria, consentendo unโesecuzione fluida e parallela delle operazioni.
1.2 - Tabella riassuntiva delle differenze
Ecco una tabella riassuntiva delle differenze tra processo e thread:
| Caratteristica | Processo | Thread |
|---|---|---|
| Spazio di memoria | Ha uno spazio di memoria separato | Condivide lo spazio di memoria con altri thread del processo |
| Isolamento | Isolato da altri processi | Condivide le risorse con altri thread nel processo |
| Comunicazione | Comunicazione tra processi complessa | Comunicazione interna tra thread piรน semplice |
| Esecuzione | Un processo puรฒ avere uno o piรน thread, eseguiti separatamente | Ogni thread รจ unโunitร di esecuzione allโinterno di un processo |
| Crashing | Se un processo va in crash, non influenza altri processi | Se un thread va in crash, puรฒ compromettere lโintero processo |
| Cambi di contesto | Richiede un cambio di contesto completo (salvataggio di registri, memoria, ecc.) | Il cambio di contesto tra thread รจ piรน rapido poichรฉ condividono memoria e risorse |
2 - Vantaggi e svantaggi dei thread
I principali vantaggi dei thread sono:
- Parallelismo: i thread permettono di eseguire compiti contemporaneamente, sfruttando al meglio i processori multicore, il che riduce i tempi di elaborazione per compiti intensivi.
- Reattivitร : nei programmi con interfaccia utente, i thread aiutano a mantenere il programma reattivo, separando i compiti di elaborazione in background dalle operazioni principali (come la gestione dellโinterfaccia grafica).
- Efficienza nella gestione della memoria: i thread condividono la memoria e le risorse del processo principale, il che riduce la duplicazione e lโuso della memoria rispetto ai processi separati.
- Minore overhead: i thread richiedono meno risorse per essere creati rispetto ai processi, poichรฉ condividono risorse e spazio di indirizzamento del processo che li ha generati.
- Comunicazione piรน semplice: condividendo la memoria, i thread possono comunicare tra loro piรน facilmente, evitando le complessitร dei canali di comunicazione tra processi separati.
I principali svantaggi dei thread sono:
- Complessitร nella programmazione: la programmazione multithreading puรฒ essere complessa, specialmente per la gestione della sincronizzazione tra thread, aumentando il rischio di errori come race conditions e deadlock.
- Sincronizzazione dei dati: poichรฉ i thread condividono la memoria, devono sincronizzare lโaccesso ai dati condivisi per evitare conflitti e incoerenze, il che puรฒ risultare difficile da gestire.
- Debug difficile: identificare e risolvere i problemi nei programmi multithreading puรฒ essere complesso, soprattutto quando si tratta di bug non deterministici che si verificano solo in determinate condizioni.
- Scalabilitร limitata: anche se i thread migliorano le prestazioni su CPU multicore, non tutti i problemi possono essere parallelizzati, e oltre un certo limite i benefici si riducono.
- Rischio di deadlock e starvation: se i thread non sono ben gestiti, possono bloccarsi in uno stato di attesa reciproca (deadlock) o essere โaffamatiโ di risorse, restando bloccati e incapaci di completare il loro compito (starvation).
3 - Multithreading
Definizione: multithreading
Il multithreading รจ la capacitร di un sistema operativo di eseguire piรน thread simultaneamente.
Il multithreading puรฒ essere implementato secondo diversi modelli:
- Molti a uno: molti thread a livello utente sono mappati in un solo thread a livello kernel. Ciรฒ implica che il blocco di un thread causa il blocco di tutti gli altri. Pochi sistemi operativi utilizzano questo modello, come Solaris Green Threads o GNU Portable Threads.
- Uno a uno: ogni thread a livello utente viene mappato in un thread a livello kernel. Ciรฒ implica una concorrenza maggiore rispetto al modello molti a uno e il numero di thread per processo a volte puรฒ essere ristretto a causa dellโoverhead. Esempi di sistemi operativi che utilizzano questo modello sono Windows, Linux e Solaris (dalla versione 9 in poi).
- Molti a molti: molti thread a livello utente sono mappati in molti thread a livello kernel. Ciรฒ permette al sistema operativo di creare un numero sufficiente di thread a livello kernel. Esempi di sistemi operativi che utilizzano questo modello sono Windows con il package ThreadFiber e Solaris (prima della versione 9).
4 - Fiber
Definizione: fiber
Un fiber รจ unโunitร in cui puรฒ essere ulteriormente suddiviso un thread.
Fonti
- Abraham Silberschatz, Peter Baer Galvin, Greg Gagne - Sistemi Operativi (10แต Edizione) - Pearson, 2019 - ISBN:
9788891904560. - ๐ซ Lezioni e slide del Prof. Aldinucci Marco del corso di Sistemi Operativi (canale B), Corso di Laurea in Informatica presso lโUniversitร di Torino, A.A. 2024-25:
- ๐ซ Appunti di Carlos Palomino del corso di Sistemi Operativi, Corso di Laurea in Informatica presso lโUniversitร di Torino, A.A. 2024-25 (caricati sul repository GitHub del Team Studentesco Informatica):