Hardware techniques used to support [[thread (computer science)|multithreading]] often parallel the software techniques used
for [[computer multitasking]] of computer programs.
In [[informatica]], il '''multithreading''' è una tecnica che permette di avere più flussi di esecuzione contemporanei (''[[Processo (informatica)|thread]]'') di uno stesso programma, in esecuzione su [[CPU]] differenti o sulla stessa.
I thread multipli hanno origine dalla stessa [[immagine eseguibile]]. In pratica, l'inizio di un thread è la creazione di un nuovo processo usando lo stesso codice di un altro, già presente in memoria. Tutti i thread di un dato programma condividono il codice eseguibile e i dati globali. Ognuno di essi ha invece una copia distinta dei dati locali, come le variabili allocate sullo [[stack]] e la memoria allocata dinamicamente.
Il multithreading permette di suddividere il lavoro a più processori in modo efficiente, ma introduce una notevole complessità che può essere spesso difficile da gestire. Il problema maggiore è la ''sincronizzazione'' tra i vari thread: spesso un thread ha bisogno dei risultati di un altro, oppure deve sovrascrivere i dati di un altro ma non prima di un dato momento. Tali problemi danno spesso origine a [[loop]] infiniti o a [[deadlock]], a volte di difficile soluzione. Alcuni concetti come il [[mutex]] sono stati sviluppati appositamente per sincronizzare thread diversi.