Ci sono molteplici situazioni in cui è auspicabile che un processo contenga più thread in esecuzione pseudo-parallela, quasi come fossero processi distinti, in grado però di condividono tra loro una parte di memoria. I thread sono sequenze di esecuzione all’interno dei processi.

Perché usare i Thread

I thread possono essere considerati come dei processi paralleli, con la differenza che essi possono condividere lo spazio degli indirizzi del processo che li contiene. I thread sono inoltre più leggeri e facili da gestire rispetto ai processi. Per il sistema operativo è più veloce creare un thread, piuttosto che generare un processo figlio. Per dare un’idea concreata di questa affermazione diciamo che per il sistema operativo la creazione di un thread, rispetto a un processo, è dalle 10 alle 100 volte più veloce.

Infine anche se i thread non consentono un incremento delle prestazioni in operazioni CPU-Bound permettono uno pseudo-parallelismo in fase di I/O, incrementando le prestazioni generali del sistema.

Un processo si può definire:

  • Single threaded, se contiene un unico thread;
  • Multiple threaded, se all’interno dello stesso processo sono presenti più thread.

Sistema Single Threaded
Sistema Single Threaded

Sistema Multi Threaded
Sistema Multi Threaded

Ogni thread condivide con gli altri thread e con il processo:

  • ID del processo;
  • Spazio degli indirizzi del processo:
    • Istruzioni;
    • Dati;
  • File aperti;
  • Segnali.

Ogni thread non condivide:

  • ID del thread;
  • Registri del thread, come ad esempio il Program Counter;
  • Stack Pointer per variabili locali;
  • Maschera dei segnali.