Proces versus thread: geheugen, omschakeling en keuzecriteria vergeleken
Een proces is een draaiend programma met een eigen adresruimte en eigen resources. Een thread is een uitvoeringseenheid binnen een proces. Threads van hetzelfde proces delen geheugen, dus ze zijn goedkoop aan te maken en communiceren snel, maar één bug of crash kan het hele proces treffen. Afzonderlijke processen zijn van elkaar geïsoleerd en dus veiliger, maar het aanmaken en de communicatie tussen processen kosten meer.
| Kenmerk | Proces | Thread |
|---|---|---|
| Wat het is | Een draaiend programma met een eigen adresruimte en resources zoals bestanden | Een uitvoeringsstroom binnen een proces. Heeft een eigen stack en registers |
| Geheugen | Aparte virtuele adresruimten. Geïsoleerd van andere processen | Deelt de code, de heap en de globale data van het proces. Alleen de stack is eigen |
| Aanmaakkosten | Hoog. Er moet een nieuwe adresruimte worden voorbereid (copy-on-write beperkt de kosten) | Laag. Een nieuwe adresruimte is niet nodig |
| Context switch | Duur. De adresruimte verandert en de translation cache (TLB) kan verloren gaan | Goedkoop. Adresruimte en caches blijven behouden |
| Communicatie | Interprocescommunicatie zoals pipes, sockets of shared memory is nodig | Direct lezen en schrijven in gedeeld geheugen, wat snel is |
| Isolatie en fouten | Een crash blijft vaak beperkt tot dat proces | De crash van één thread kan het hele proces meeslepen |
| Synchronisatie | Nodig wanneer processen geheugen of bestanden delen | Altijd nodig voor gedeelde data. Zonder mutexen of atomaire operaties ontstaan data races en deadlocks |
| Scheduling | Bevat een of meer threads | De eenheid die het besturingssysteem daadwerkelijk aan CPU-cores toewijst |
| Belangrijkste toepassingen | Voor isolatie en veiligheid. Browsertabbladen, services, shell-pipelines | Parallelle verwerking binnen één programma. Servers met veel verbindingen, achtergrondtaken, parallelle berekeningen |
De getalswaarden zijn typische ordegroottes en variëren per procesgeneratie en product.