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

Un thread si dice che รจ a livello utente quando viene creato dallโ€™utente tramite lโ€™uso di una libreria. Essi sono visibili al processo che li ha creati e al suo ambiente dโ€™esecuzione.

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.

150

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:

CaratteristicaProcessoThread
Spazio di memoriaHa uno spazio di memoria separatoCondivide lo spazio di memoria con altri thread del processo
IsolamentoIsolato da altri processiCondivide le risorse con altri thread nel processo
ComunicazioneComunicazione tra processi complessaComunicazione interna tra thread piรน semplice
EsecuzioneUn processo puรฒ avere uno o piรน thread, eseguiti separatamenteOgni thread รจ unโ€™unitร  di esecuzione allโ€™interno di un processo
CrashingSe un processo va in crash, non influenza altri processiSe un thread va in crash, puรฒ compromettere lโ€™intero processo
Cambi di contestoRichiede 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:

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):