Toon posts:

[C++] verschil tussen een thread en een proces

Pagina: 1
Acties:
  • 562 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Wie kan mij het verschil uiteggen (als dat er is) tussen een thread en een proces.

  • woutertjez
  • Registratie: Januari 2001
  • Laatst online: 02-09 10:02
Een toepassing kan bestaan uit meerder processen en meerdere threads, er kan per thread maar 1 proces tegelijkertijd worden uitgevoerd. Op de computer kunnen er meerdere threads tegelijk worden uitgevoerd per toepassing (multi-threading). Dus als een toepassing geen multi-threading gebruikt, kan er maar 1 proces tegelijkertijd worden uitgevoerd.

Hoop dat het een beetje duidelijk is :)

  • Bobco
  • Registratie: Januari 2001
  • Laatst online: 30-10-2023

Bobco

I used to dream about Verona.

Verhelderende PDF kan [url="http://"http://www.cs.duke.edu/education/courses/spring01/ cps210/Lectures/lecture8.pdf"]hier[/url] worden gevonden. Kort samengevat: een applicatie kan uit meerder processen bestaan die op hun beurt weer uit meerdere threads kunnen bestaan. Per CPU is er maximaal een thread tegelijkertijd actief.

With the light in our eyes, it's hard to see.


  • The End
  • Registratie: Maart 2000
  • Laatst online: 19:07

The End

!Beginning

Op donderdag 30 mei 2002 14:36 schreef woutertjez het volgende:
Een toepassing kan bestaan uit meerder processen en meerdere threads, er kan per thread maar 1 proces tegelijkertijd worden uitgevoerd. Op de computer kunnen er meerdere threads tegelijk worden uitgevoerd per toepassing (multi-threading). Dus als een toepassing geen multi-threading gebruikt, kan er maar 1 proces tegelijkertijd worden uitgevoerd.

Hoop dat het een beetje duidelijk is :)
Andersom :) Een process kan meerdere threads bevatten (iig 1)

  • Elissen
  • Registratie: Januari 2000
  • Laatst online: 27-07 15:54
Sorry woutertjez, maar ik denk dat je zelf snapt, maar het komt er niet optimaal uit (no offence).

Een proces (applicatie) kan uit meerdere threads bestaan, het is er altijd minimaal 1. Een thread kan maar één ding (taak) tegelijk doen. (En de rest van woutertjez, beetje aangepast:) Op de computer kunnen er meerdere threads tegelijk worden uitgevoerd per toepassing (multi-threading). Dus als een toepassing geen multi-threading gebruikt, kan er maar 1 taak tegelijkertijd worden uitgevoerd.

En: als je meerdere processoren hebt worden de threads over de processoren verdeeld. Threads werken nl. onafhankelijk van elkaar.

Het nut ervan is dat je bijvoorbeeld je User Interface (UI) kunt scheiden van langdurige taken. De verkenner doet dit ook. Als je een bestand aan het kopieeren bent kan je gewoon met dezelfde verkenner verder werken, omdat het kopieeren door een andere thread word gedaan. De (hoofd-) thread kan dan zorgen dat er wat gebeurd als je klikt.

Roep maar als je nog meer vragen hebt.

[edit]
Druk hier :). Terwijl ik druk aan het typen was zijn er meer helpende handen.

  • woutertjez
  • Registratie: Januari 2001
  • Laatst online: 02-09 10:02
Op donderdag 30 mei 2002 14:51 schreef The End het volgende:

[..]

Andersom :) Een process kan meerdere threads bevatten (iig 1)
Uhmmm.... juist ja.... je hebt gelijk.

Had 't niet helemaal netjes op een rijtje toen ik 't op wou schrijven :)

Verwijderd

Topicstarter
Op donderdag 30 mei 2002 14:55 schreef Elissen het volgende:
Roep maar als je nog meer vragen hebt.
Dus ik moet eerst een proces starten voordat ik een thread kan starten.

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 08:58
Op donderdag 30 mei 2002 14:55 schreef Elissen het volgende:
Een proces (applicatie) kan uit meerdere threads bestaan, het is er altijd minimaal 1. Een thread kan maar één ding (taak) tegelijk doen. Op de computer kunnen er meerdere threads tegelijk worden uitgevoerd per toepassing (multi-threading). Dus als een toepassing geen multi-threading gebruikt, kan er maar 1 taak tegelijkertijd worden uitgevoerd.
"tegelijkertijd" is een moeilijk woord hier. Een compu met CPU kan sowieso maar een ding tegelijkertijd doen, met of zonder MT. Met MT kan de processor doorgaan met een andere thread terwijl bv. de HD bezig is; zonder MT zou het hele programma moeten wachten totdat HD of network I/O klaar is.
En: als je meerdere processoren hebt worden de threads over de processoren verdeeld. Threads werken nl. onafhankelijk van elkaar.
"Onafhanklijk" in CPU-tijd. Ze gebruiken wel hetzelfde geheugen en dergelijke.
Het nut ervan is dat je bijvoorbeeld je User Interface (UI) kunt scheiden van langdurige taken. De verkenner doet dit ook. Als je een bestand aan het kopieeren bent kan je gewoon met dezelfde verkenner verder werken, omdat het kopieeren door een andere thread word gedaan. De (hoofd-) thread kan dan zorgen dat er wat gebeurd als je klikt.
Ik dacht dat dat inmiddels ook niet meer waar was, dat (Win200+/ME) Explorer daarvoor een nieuw proces aanmaakte. Als een thread crasht gaat het hele proces naar de kloten; een apart proces is daarentegen veilig. Maar IHA is een aparte UI thread wel handig - threads kunnen veel makkelijker data uitwisselen (want gedeeld geheugen).

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Verwijderd

Dus ik moet eerst een proces starten voordat ik een thread kan starten.
Ja en nee... In principe kan je een proces het beste zien als een groep threads. Een niet multithreaded programma bestaat op die manier dus uit een proces (een ding met een naam, een PID, en dat soort dingen) met daarin 1 thread.

Het aanmaken van een proces met die ene thread doet je besturingssysteem voor je zodra je je programma opstart. Vanuit je programma kan je meerdere threads maken, starten, stoppen etc. Ook kan je nieuwe processen maken natuurlijk, maar daarover heb je minder controle dan over een thread (een thread draait binnen de context van je proces, dus in dezelfde geheugenruimte. Processen zijn van elkaar afgeschermd, threads niet).

edit:

Om het extra verwarrend te maken heb je in Windows ook nog zoiets als fibers. Dat zijn dan weer threads die niet door de scheduler van 't OS aangeroepen worden...

Verwijderd

Topicstarter
Ik heb in mijn code de volgende regel staan:

system(start /Dc:\\mrtg-2.9.17\\bin perl mrtg --logging=eventlog mrtg.cfg)

Dan wordt de zaak tussen de haakjes (een snmp daemon) op de cmd line uitgevoerd. Heb ik dan een nieuwe thread of een nieuw proces.

Verwijderd

Dan heb je een nieuw proces.

  • Elissen
  • Registratie: Januari 2000
  • Laatst online: 27-07 15:54
Op donderdag 30 mei 2002 15:13 schreef MSalters het volgende:

[..]

"tegelijkertijd" is een moeilijk woord hier. Een compu met CPU kan sowieso maar een ding tegelijkertijd doen, met of zonder MT. Met MT kan de processor doorgaan met een andere thread terwijl bv. de HD bezig is; zonder MT zou het hele programma moeten wachten totdat HD of network I/O klaar is.
[..]

"Onafhanklijk" in CPU-tijd. Ze gebruiken wel hetzelfde geheugen en dergelijke.
[..]

Ik dacht dat dat inmiddels ook niet meer waar was, dat (Win200+/ME) Explorer daarvoor een nieuw proces aanmaakte. Als een thread crasht gaat het hele proces naar de kloten; een apart proces is daarentegen veilig. Maar IHA is een aparte UI thread wel handig - threads kunnen veel makkelijker data uitwisselen (want gedeeld geheugen).
U heeft helemaal gelijk, ik legde het iets te algemeen uit. Maareh, om verschillende vensters van explorer in een apart proces uit te voeren is een optie die standaard uit staat.
Pagina: 1