Vad är den tekniska skillnaden mellan en process och en tråd?
Jag har en känsla av att ett ord som 'process' är överanvänt och att det också finns hårdvaru- och programvarutrådar. Vad sägs om lättviktiga processer i språk som Erlang? Finns det en definitiv anledning att använda den ena termen framför den andra?
Både processer och trådar är oberoende exekveringssekvenser. Den typiska skillnaden är att trådar (av samma process) körs i ett delat minnesutrymme, medan processer körs i separata minnesutrymmen.
Jag är inte säker på vad "hårdvara" vs "mjukvara" trådar du kanske syftar på. Trådar är en funktion i driftsmiljön, snarare än en CPU-funktion (även om CPU:n vanligtvis har operationer som gör trådar effektiva).
Erlang använder termen "process" eftersom den inte har någon modell för multiprogrammering med delat minne. Att kalla dem "trådar" skulle innebära att de har delat minne.
Ett program består av en eller flera processer. En process är i enklaste mening ett program som körs. En eller flera trådar körs i processens sammanhang. En tråd är den grundläggande enhet som operativsystemet tilldelar processortid till. En tråd kan exekvera vilken del som helst av processkoden, inklusive delar som för närvarande exekveras av en annan tråd. En fiber är en exekveringsenhet som måste schemaläggas manuellt av programmet. Fibrer körs i sammanhanget för de trådar som schemalägger dem.
Stulet från här.
Både trådar och processer är atomära enheter för OS-resursallokering (det finns en samtidighetsmodell som beskriver hur CPU-tiden delas mellan dem och modellen för att äga andra OS-resurser). Det finns en skillnad i:
Greg Hewgill ovan hade rätt om Erlangs betydelse av ordet "process", och här finns en diskussion om varför Erlang kan göra processer lättviktiga.