Qual è la differenza tecnica tra un processo e un thread?
Ho la sensazione che una parola come 'processo' sia abusata e che ci siano anche thread hardware e software. Che dire dei processi leggeri in linguaggi come Erlang? C'è una ragione definitiva per usare un termine piuttosto che l'altro?
Sia i processi che i thread sono sequenze di esecuzione indipendenti. La differenza tipica è che i thread (dello stesso processo) girano in uno spazio di memoria condiviso, mentre i processi girano in spazi di memoria separati.
Non sono sicuro a cosa "hardware" vs "software" threads ti riferisci. I thread sono una caratteristica dell'ambiente operativo, piuttosto che una caratteristica della CPU (anche se la CPU ha tipicamente operazioni che rendono efficienti i thread).
Erlang usa il termine "processo" perché non espone un modello di multiprogrammazione a memoria condivisa. Chiamarli "threads" implicherebbe che hanno memoria condivisa.
Un'applicazione consiste in uno o più processi. Un processo, nei termini più semplici, è un programma in esecuzione. Uno o più thread vengono eseguiti nel contesto del processo. Un thread è l'unità di base a cui il sistema operativo assegna il tempo del processore. Un thread può eseguire qualsiasi parte del codice del processo, incluse le parti attualmente in esecuzione da un altro thread. Una fibra è un'unità di esecuzione che deve essere pianificata manualmente dall'applicazione. Le fibre vengono eseguite nel contesto dei thread che le programmano.
Rubato da qui.
Sia i thread che i processi sono unità atomiche di allocazione delle risorse del sistema operativo (cioè c'è un modello di concorrenza che descrive come il tempo della CPU è diviso tra loro, e il modello di possesso di altre risorse del sistema operativo). C'è una differenza:
Greg Hewgill sopra era corretto circa il significato Erlang della parola "processo", e qui c'è una discussione sul perché Erlang potrebbe fare processi leggeri.