Thread Flashcards
Cos’è un thread e cosa comprende?
Un thread è l’unità di base d’uso della CPU e comprende un identificatore di thread (ID), un contatore di programma, un** insieme di registri**, e una pila (stack).
Quali elementi condividono due o più thread appartenenti allo stesso processo?
Due o più thread, che appartengono allo stesso processo, condividono:
- la sezione del codice;
- la sezione dei dati;
- altre risorse di sistema, come i file aperti e i segnali.
Qual è la differenza tra processo pesante e multithread?
Un processo tradizionale, chiamato anche processo pesante (heavyweight process), è composto da un solo thread. Un processo multithread è in grado di lavorare a più compiti in modo concorrente.
Quali sono i vantaggi della programmazione multithread?
I vantaggi della programmazione multithread si possono classificare rispetto a quattro fattori principali.
- Tempo di risposta. Rendere multithread un applicazione interattiva può permettere a un programma di continuare la sua esecuzione, anche se una parte di esso è bloccata o sta eseguendo un’operazione particolarmente lunga, riducendo il tempo di risposta medio all’utente.
- Condivisione delle risorse. I processi possono condividere risorse soltanto attraverso tecniche come la memoria condivisa o il passaggio di messaggi. Queste tecniche devono essere esplicitamente messe in atto e organizzate dal programmatore. Tuttavia, i thread condividono d’ufficio la memoria e le risorse del processo al quale appartengono. Il vantaggio della condivisione del codice consiste nel fatto che un’applicazione può avere molti thread di attività diverse, tutti nello stesso spazio d’indirizzi.
- Economia. Assegnare memoria e risorse per la creazione di nuovi processi è costoso; poiché i thread condividono le risorse del processo cui appartengono, è molto più conveniente creare thread e gestirne i cambi di contesto.
- Scalabilità. I vantaggi della programmazione multithread aumentano notevolmente nelle architetture multiprocessore, dove i thread si possono eseguire in parallelo (uno per ciascun processore). Un processo con un singolo thread può funzionare solo su un processore, indipendentemente da quanti ve ne siano a disposizione. Il multithreading su una macchina con più processori incrementa il parallelismo.
Qual è la differenza tra thread a livello utente e thread a livello kernel?
I thread a livello utente sono gestiti senza l’aiuto del kernel; i secondi, invece, sono gestiti direttamente dal sistema operativo. Tra i due livelli esistono delle relazioni.
Cosa si intende per modello da molti a uno?
II modello da molti a uno fa corrispondere molti thread a livello utente a un singolo thread a livello kernel. Poiché si svolge nello spazio utente, la gestione dei thread risulta efficiente, ma l’intero processo rimane bloccato se un thread invoca una chiamata di sistema di tipo bloccante.
Cosa si intende per modello da uno a uno?
Il modello da uno a uno mette in corrispondenza ciascun thread a livello utente con un thread a livello kernel. Questo modello offre un grado di concorrenza maggiore rispetto al modello da molti a uno, poiché anche se un thread invoca una chiamata di sistema bloccante, è possibile eseguire un altro thread; il modello permette anche l’esecuzione dei thread in parallelo nei sistemi multiprocessore.
Cosa si intende per modello da molti a molti?
Il modello da molti a molti mette in corrispondenza più thread a livello utente con un numero minore o uguale di thread a livello kernel.
Perché con un modello da molti a uno, risulta impossibile eseguire thread multipli in parallelo in sistemi multiprocessore?
Poiché un solo thread alla volta può accedere al kernel, è impossibile eseguire thread multipli in parallelo in sistemi multiprocessore.
Qual è lo svantaggio del modello da uno a uno? Come viene gestito?
L’unico svantaggio di questo modello è che la creazione di ogni thread a livello utente comporta la creazione del corrispondente thread a livello kernel.
Poiché il carico dovuto alla creazione di un thread a livello kernel può compromettere le prestazioni di un’applicazione, la maggior parte delle realizzazioni di questo modello limita il numero di thread gestibili dal sistema.
Qual è la variante del modello da molti a molti e cosa prevede?
Una diffusa variante del modello da molti a molti mantiene la corrispondenza fra più thread utente con un numero minore o uguale di thread del kernel, ma permette anche di* vincolare un thread utente a un solo thread del kernel.* La variante, è detta modello a due livelli.