'Verschil tussen proces en draad' is een van de meest gestelde vragen tijdens technische interviews. Beide processen en threads zijn aan elkaar gerelateerd en lijken erg op elkaar, waardoor verwarring ontstaat om de verschillen tussen beide te begrijpen. Het proces en de thread vormen een onafhankelijke uitvoeringsvolgorde, maar beide zijn zodanig gedifferentieerd dat processen in verschillende geheugenruimten worden uitgevoerd, terwijl threads van hetzelfde proces in een gedeelde geheugenruimte worden uitgevoerd.
In dit onderwerp zullen we de korte introductie van processen en threads begrijpen en wat andere verschillen tussen beide zijn.
Wat is proces?
Een proces is een instantie van een programma dat wordt uitgevoerd. Wanneer we een programma uitvoeren, wordt het niet rechtstreeks uitgevoerd. Het duurt enige tijd om alle stappen te volgen die nodig zijn om het programma uit te voeren, en het volgen van deze uitvoeringsstappen staat bekend als een proces.
Een proces kan andere processen creëren om meerdere taken tegelijk uit te voeren; de gecreëerde processen staan bekend als kloon- of kindproces , en het hoofdproces staat bekend als de ouderproces . Elk proces bevat zijn eigen geheugenruimte en deelt deze niet met de andere processen. Het staat bekend als de actieve entiteit. Een typisch proces blijft in de onderstaande vorm in het geheugen achter.
schakelkast java
Een proces in OS kan een van de volgende statussen behouden:
Hoe werken processen?
Wanneer we beginnen met het uitvoeren van het programma, begint de processor het te verwerken. Er zijn de volgende stappen nodig:
Java-uitzonderingen
- Eerst wordt het programma na vertaling in binaire code in het geheugen van de computer geladen.
- Een programma heeft geheugen en andere bronnen van het besturingssysteem nodig om het uit te voeren. De bronnen zoals registers, programmateller en een stapel, en deze bronnen worden geleverd door het besturingssysteem.
- Een register kan een instructie, een opslagadres of andere gegevens bevatten die vereist zijn voor het proces.
- De programmateller houdt het spoor van het programmaverloop bij.
- De stapel bevat informatie over de actieve subroutines van een computerprogramma.
- Een programma kan er verschillende exemplaren van hebben, en elk exemplaar van het actieve programma staat bekend als het individuele proces.
Kenmerken van proces
- Elke keer dat we een proces maken, moeten we voor elk proces een afzonderlijke systeemaanroep naar het besturingssysteem doen. De vork () functie creëert het proces.
- Elk proces bestaat binnen zijn eigen adres of geheugenruimte.
- Elk proces is onafhankelijk en wordt door het besturingssysteem als een geïsoleerd proces behandeld.
- Processen hebben IPC (Inter-process Communication) nodig om met elkaar te kunnen communiceren.
- Een goede synchronisatie tussen processen is niet vereist.
Wat is draad?
Een thread is de subset van een proces en wordt ook wel het lichtgewichtproces genoemd. Een proces kan meer dan één thread hebben, en deze threads worden onafhankelijk beheerd door de planner. Alle draden binnen één proces zijn met elkaar verbonden. Discussies bevatten een aantal gemeenschappelijke informatie, zoals gegevenssegment, codesegment, bestanden, enz., die wordt gedeeld met hun collega-threads. Maar bevat zijn eigen registers, stapel en teller.
Hoe werkt draad?
Zoals we hebben besproken is een thread een subproces of een uitvoeringseenheid binnen een proces. Een proces kan een enkele thread tot meerdere threads bevatten. Een draad werkt als volgt:
- Wanneer een proces start, wijst het besturingssysteem het geheugen en de bronnen eraan toe. Elke thread binnen een proces deelt alleen het geheugen en de bronnen van dat proces.
- Threads worden vooral gebruikt om de afhandeling van een aanvraag te verbeteren. In werkelijkheid wordt slechts één thread tegelijk uitgevoerd, maar door het snelle wisselen van context tussen threads ontstaat de illusie dat threads parallel lopen.
- Als een enkele thread in een proces wordt uitgevoerd, staat dit bekend als een enkele draad En als meerdere threads tegelijkertijd worden uitgevoerd, staat dit bekend als multithreading.
Soorten draden
Er zijn twee soorten draden, namelijk:
1. Discussie op gebruikersniveau
taakbeheer voor Linux
Zoals de naam al doet vermoeden, worden de threads op gebruikersniveau alleen beheerd door gebruikers, en beschikt de kernel niet over de bijbehorende informatie.
Deze zijn sneller, eenvoudig te maken en te beheren.
De kernel beschouwt al deze threads als één enkel proces en behandelt ze als slechts één proces.
De threads op gebruikersniveau worden geïmplementeerd door bibliotheken op gebruikersniveau, niet door de systeemaanroepen.
2. Thread op kernelniveau
De threads op kernelniveau worden afgehandeld door het besturingssysteem en beheerd door de kernel ervan. Deze threads zijn langzamer dan threads op gebruikersniveau, omdat contextinformatie door de kernel wordt beheerd. Om een thread op kernelniveau te maken en te implementeren, moeten we een systeemaanroep doen.
array van strings in c-programmering
Kenmerken van draad
- Threads delen gegevens, geheugen, bronnen, bestanden, enz. met hun collega-threads binnen een proces.
- Eén systeemoproep kan meer dan één thread creëren.
- Elke thread heeft zijn eigen stapel en register.
- Threads kunnen rechtstreeks met elkaar communiceren omdat ze dezelfde adresruimte delen.
- Threads moeten worden gesynchroniseerd om onverwachte scenario's te voorkomen.
Belangrijkste verschillen tussen proces en draad
- Een proces is onafhankelijk en maakt geen deel uit van een ander proces, terwijl alle threads logischerwijs binnen een proces zijn opgenomen.
- Processen wegen zwaar, terwijl threads licht wegen.
- Een proces kan individueel bestaan omdat het zijn eigen geheugen en andere bronnen bevat, terwijl een thread geen individueel bestaan kan hebben.
- Een goede synchronisatie tussen processen is niet vereist. Threads moeten daarentegen worden gesynchroniseerd om onverwachte scenario's te voorkomen.
- Processen kunnen alleen met elkaar communiceren via communicatie tussen processen; Daarentegen kunnen threads rechtstreeks met elkaar communiceren omdat ze dezelfde adresruimte delen.
Verschiltabel tussen proces en thread
Proces | Draad |
---|---|
Een proces is een instantie van een programma dat wordt uitgevoerd of verwerkt. | Thread is een segment van een proces of een lichtgewicht proces dat onafhankelijk door de planner wordt beheerd. |
Processen zijn onafhankelijk van elkaar en delen daarom geen geheugen of andere bronnen. | Threads zijn onderling afhankelijk en delen geheugen. |
Elk proces wordt door het besturingssysteem als een nieuw proces behandeld. | Het besturingssysteem neemt alle threads op gebruikersniveau als één proces. |
Als een proces door het besturingssysteem wordt geblokkeerd, kan het andere proces de uitvoering voortzetten. | Als een thread op gebruikersniveau wordt geblokkeerd, worden ook alle peer-threads geblokkeerd omdat het besturingssysteem ze allemaal als één enkel proces beschouwt. |
Het wisselen van context tussen twee processen kost veel tijd omdat ze zwaar zijn in vergelijking met threads. | Het wisselen van context tussen de threads gaat snel omdat ze erg licht zijn. |
Het datasegment en het codesegment van elk proces zijn onafhankelijk van het andere. | Threads delen gegevenssegmenten en codesegmenten met hun peer-threads; daarom zijn ze ook hetzelfde voor andere threads. |
Het besturingssysteem heeft meer tijd nodig om een proces te beëindigen. | Threads kunnen in zeer korte tijd worden beëindigd. |
Het maken van nieuwe processen kost meer tijd, omdat elk nieuw proces alle bronnen in beslag neemt. | Een thread heeft minder tijd nodig om te maken. |