Thread (informatica): differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
fix |
|||
(41 versioni intermedie di 31 utenti non mostrate) | |||
Riga 1:
[[File:Multithreaded process.svg|thumb|Un processo con due thread]]
Un '''thread''' o '''thread di esecuzione''', in [[informatica]], è una suddivisione di un [[processo (informatica)|processo]] in due o più filoni o sottoprocessi, che vengono [[esecuzione (informatica)|eseguiti]] [[concorrenza (informatica)|concorrentemente]] da un [[computer|sistema di elaborazione]] mono[[processore]] ([[multithreading]]) o [[multiprocessore]] o [[Multicore]].▼
poraccitudine has not limits è composto essenzialmente da tre elementi: [[program counter]], valori nei [[registro (informatica)|registri]] e stack. Le risorse condivise con gli altri threads di uno stesso ''task'' sono essenzialmente la sezione di codice, la sezione di dati e le risorse del [[sistema operativo]].▼
▲Un '''thread'''<ref>Lett. "filone".</ref> o '''thread di esecuzione''', in [[informatica]], è una suddivisione di un [[processo (informatica)|processo]] in due o più filoni (istanze) o sottoprocessi
Nelle architetture a processore singolo, quando la [[CPU]] esegue alternativamente [[istruzione (informatica)|istruzioni]] di thread differenti, si parla di [[multithreading]] a divisione di tempo: la commutazione fra i thread avviene di solito tanto frequentemente da dare all'utente l'impressione che tutti i task siano eseguiti contemporaneamente. Nelle architetture multi-processore i thread vengono invece realmente eseguiti contemporaneamente cioè in parallelo, ciascuno su un distinto core.▼
== Definizioni ==
Quando delle azioni sono effettuate a livello di thread tutta l'informazione di stato riguardante l'esecuzione viene tenuta in strutture dati a livello di thread. Ci sono, comunque, molte azioni che influiscono su tutti i thread di un processo e che il sistema operativo deve gestire a livello di processo. A questo genere di azioni appartengono la ''sospensione'' e la ''terminazione'' di un processo. In entrambi i casi, la rimozione dalla memoria dello spazio di indirizzamento si ripercuote su tutti i thread che condividono quello spazio di indirizzamento e che entrano quindi tutti insieme nello stato di sospensione o di terminazione.▼
La specificazione dell'implementazione dei thread e dei [[Processo (informatica)|processi]] dipende dal [[sistema operativo]], ma in generale un thread è contenuto all'interno di un processo e diversi thread contenuti nello stesso processo condividono alcune risorse, lo spazio d'indirizzamento del processo<ref>{{Cita pubblicazione|autore=Mike Accetta|autore2=Robert Baron|autore3=William Bolosky|coautori=David Golub, Richard Rashid, Avadis Tevanian, Michael Young|anno=1986|titolo=Mach: A New Kernel Foundation For UNIX Development|editore=Computer Science Department, Carnegie Mellon University|città=Pittsburgh, Pa. 15213|pp=3-4|lingua=en|url=https://cseweb.ucsd.edu//classes/wi11/cse221/papers/accetta86.pdf|citazione=A thread is the basic unit of CPU utilization. It is roughly equivalent
to an independent program counter operating within a task. All threads within a task share access to all task resources.}}</ref>, mentre processi differenti non condividono le loro risorse.
▲
▲Nelle architetture a processore singolo, quando la [[CPU]] esegue alternativamente [[istruzione (informatica)|istruzioni]] di thread differenti, si parla di [[multithreading]] a divisione di tempo: la commutazione fra i thread avviene di solito tanto frequentemente da dare all'utente l'impressione che tutti i task siano eseguiti contemporaneamente. Nelle architetture multi-processore i thread vengono invece realmente eseguiti contemporaneamente, cioè in parallelo, ciascuno su un distinto core.<ref>{{Cita web|url=https://learn.microsoft.com/it-it/windows/win32/procthread/processes-and-threads|titolo=Processi e thread - Win32 apps|autore=Karl-Bridge-Microsoft|sito=learn.microsoft.com|data=2023-06-13|lingua=it-it|accesso=2023-10-24}}</ref>
▲Quando delle azioni sono effettuate a livello di thread tutta l'informazione di stato riguardante l'esecuzione viene tenuta in strutture dati a livello di thread. Ci sono
Come i processi anche i thread hanno uno stato di esecuzione e possono sincronizzarsi tra loro. Gli stati di un thread sono '''ready''', '''running''' e '''blocked'''.
Ci sono quattro operazioni di base associate ai cambiamenti di stato di un thread.
* '''Creazione:''' quando un processo viene creato, si crea anche un thread. Successivamente un thread può creare un altro thread a cui deve fornire il [[Puntatore (programmazione)|puntatore]] delle istruzioni e gli argomenti: vengono creati un contesto per i registri e gli stack, e il nuovo thread è messo nella coda dei ''ready''.
* '''Blocco:''' quando un thread deve aspettare un particolare evento entra in stato ''blocked'' (salvando i registri utente, il program counter e lo [[stack pointer]])
* '''Sblocco:''' quando si verifica l'evento per cui il processo era stato posto in stato blocked, il thread passa allo stato ready.
* '''Terminazione:''' quando un thread completa il suo compito, il suo contesto per i registri e i suoi stack vengono deallocati.
== Applicazioni ==
Applicazioni tipiche dei thread sono la parallelizzazione di un [[programma (informatica)|programma]] per sfruttare i moderni processori [[multi core]] e/o i core a più thread: infatti
Nelle [[interfaccia utente|interfacce utente]]
Il vantaggio principale dei Thread è nelle prestazioni: operazioni come creazione, terminazione e cambio tra due thread di un processo richiedono meno tempo rispetto alla creazione, terminazione e cambio di processi.
I thread migliorano anche l'efficienza della comunicazione fra i programmi in esecuzione. Nella maggior parte dei sistemi operativi, la comunicazione fra processi indipendenti richiede l'intervento del [[kernel]] per fornire un meccanismo di protezione e di comunicazione.
== Difficoltà==
La [[programmazione concorrente]], cioè
Ne consegue che
La sincronizzazione di un thread con un altro è normalmente necessaria per permettere a questi di comunicare tra di loro e di restituire i risultati di una funzione al processo principale; essa viene normalmente realizzata tramite [[mutex]].
== Note ==
<references/>
== Voci correlate ==
Line 44 ⟶ 51:
* [[Fibra (informatica)]]
* [[Fork (programmazione)]]
== Altri progetti ==
{{interprogetto|preposizione=sul}}
== Collegamenti esterni ==
* {{Collegamenti esterni}}
* {{FOLDOC||thread}}
{{Controllo di autorità}}
{{Portale|informatica}}
[[Categoria:
|