In alcune situazioni una singola applicazione deve poter gestire molti compiti simili tra loro
In altre una singola applicazione può dover gestire più compiti diversi, a volte eseguibili concorrentemente
Una possibile soluzione è quella della creazione di più processi tradizionali
Nel modello a processi, l’attivazione di un processo o il cambio di contesto sono operazioni molto complesse che richiedono ingenti quantità di tempo per essere portate a termine
Tuttavia a volte l’attività richiesta ha vita relativamente breve rispetto a questi tempi (ad esempio l’invio di una pagina html da parte di un server web: applicazione troppo leggera per motivare un nuovo processo)
Possibile soluzione: threads
Un thread è talvolta chiamato processo leggero (lightweight process)
Condivide con gli altri thread che appartengono allo stesso processo la sezione del codice, la sezione dei dati e altre risorse di sistema, come i file aperti e i segnali
Processi tradizionali: singolo thread, processi multithread: più thread
Molti kernel sono ormai multithread, con i singoli thread dedicati a servizi specifici come la gestione dei dispositivi periferici o delle interruzioni
Molti programmi per i moderni pc sono predisposti per essere eseguiti da processi multithread
Un’applicazione, solitamente, è codificata come un processo a sé stante comprendente più thread di controllo
Il multithreading è la capacità di un sistema operativo di supportare thread di esecuzione multipli per ogni processo
Le idee di base dietro il modello a thread sono:
Ogni processo racchiude più flussi di controllo (thread) che condividono le aree di testo e dei dati
Un thread è l’unità di base d’uso della CPU e comprende: