Wat is het verschil tussen een proces en een thread?

Wat is het technische verschil tussen een proces en een thread?

Ik heb het gevoel dat een woord als 'process' te veel gebruikt wordt en er zijn ook hardware en software threads. Hoe zit het met lichtgewicht processen in talen als Erlang? Is er een definitieve reden om de ene term boven de andere te gebruiken?

Oplossing

Zowel processen als threads zijn onafhankelijke sequenties van uitvoering. Het typische verschil is dat threads (van hetzelfde proces) in een gedeelde geheugenruimte draaien, terwijl processen in afzonderlijke geheugenruimten draaien.

Ik weet niet zeker naar welke "hardware" vs "software" threads je misschien verwijst. Threads zijn een kenmerk van de besturingsomgeving, eerder dan een kenmerk van de CPU (hoewel de CPU typisch operaties heeft die threads efficiënt maken).

Erlang gebruikt de term "process" omdat het geen gedeeld-memory multiprogrammeer model heeft. Ze "threads" noemen zou impliceren dat ze gedeeld geheugen hebben.

Commentaren (10)

Een applicatie bestaat uit een of meer processen. Een proces, in de eenvoudigste termen, is een uitvoerend programma. Een of meer threads draaien in de context van het proces. Een thread is de basiseenheid waaraan het besturingssysteem processortijd toekent. Een thread kan elk deel van de procescode uitvoeren, ook delen die op dat moment door een andere thread worden uitgevoerd. Een vezel is een uitvoeringseenheid die handmatig door de applicatie moet worden gepland. Fibers draaien in de context van de threads die ze plannen.

Gejat van hier.

Commentaren (2)

Zowel threads als processen zijn atomaire eenheden van OS-bronnentoewijzing (d.w.z. er is een concurrency-model dat beschrijft hoe CPU-tijd tussen hen wordt verdeeld, en het model van het bezit van andere OS-bronnen). Er is een verschil in:

  • Gedeelde bronnen (threads delen per definitie geheugen, ze bezitten niets behalve stack en lokale variabelen; processen kunnen ook geheugen delen, maar daar is een apart mechanisme voor, onderhouden door OS)
  • Toewijzingsruimte (kernelruimte voor processen vs. gebruikersruimte voor threads)

Greg Hewgill hierboven had gelijk over de Erlang betekenis van het woord "process" en hier er'is een discussie over waarom Erlang processen lichtgewicht zou kunnen doen.

Commentaren (0)