Windows C ++ Process vs Tråd

Indlæg af Hanne Mølgaard Plasc

Problem



I Windows C ++, createThread() får nogle af tråderne til at bremse, hvis en tråd gør en meget CPU-intensiv drift. Vil createProcess() afhjælpe dette? Hvis det er tilfældet, betyder createProcess() at koden skal opholde sig i en anden eksekverbar, eller kan det hele ske inden for samme eksekverbare?

Bedste reference


Den største forskel mellem en proces og en tråd er, at hver proces har sit eget hukommelsesrum, mens tråde deler hukommelsespladsen af ​​den proces, de kører indenfor.


Hvis en tråd virkelig er CPU-bundet, vil den kun bremse en anden tråd, hvis de begge udfører samme processorkerne. createProcess vil ikke lindre dette, da en proces stadig vil have det samme problem.


Også, hvilken slags maskine kører du dette på? Har det mere end en kerne?

Andre referencer 1


Ikke sandsynligt - en proces er meget 'tyngre' end en tråd, så det vil sandsynligvis være langsommere stadig. Jeg er ikke sikker på hvad du spørger om den 2. eksekverbare, men du kan bruge createProcess på samme .exe.


http://msdn.microsoft.com/en-us/library/ms682425(v=vs.85).aspx[5]


Det lyder som om du chasing ned nogle præstationsproblemer, så det kan være nyttigt at prøve en trådeorienteret profiler: http://software.intel.com/en-us/articles/using-intel-thread-profiler-for -win32-gevind-filosofi-og-teori/[6]

Andre referencer 2


Hver proces giver de nødvendige ressourcer til at udføre et program. En proces har et virtuelt adresserum, en eksekverbar kode, åbne håndtag til systemobjekter, en sikkerhedskontekst, en unik procesidentifikator, miljøvariabler, en prioritetsklasse, minimum og maksimal arbejdssætstørrelser og mindst en tråd af udførelse. Hver proces startes med en enkelt tråd, ofte kaldet den primære tråd, men kan skabe yderligere tråde fra nogen af ​​dens tråde.


En tråd er enheden inden for en proces, der kan planlægges til udførelse. Alle tråde i en proces deler dens virtuelle adresserum og systemressourcer. Derudover opretholder hver tråd undtagelseshandlere, en planlægningsprioritet, tråd lokal lagring, en unik trådidentifikator og et sæt strukturer, som systemet vil bruge til at gemme trådkonteksten, indtil den er planlagt. Trådkonteksten indbefatter trådens sæt af maskinregistre, kernebrikken, en trådmiljøblok og en brugerstabel i adresserummet for trådens proces. Tråd kan også have deres egen sikkerhedskontekst, som kan bruges til efterligning af klienter.

Andre referencer 3


Opret proces og opret tråd både forårsager ekstra udførelse på, hvad der er et ressourcebegrænset miljø. Betydning, uanset hvordan du foretager parallelbehandling på et eller andet tidspunkt, vil dine andre udførelseslinjer forhindre det aktuelle. Det er af denne grund, at der er meget store problemer, der er egnede til parallelisering, der distribueres. Der er plusser og minuser tho tråde og processer.





Tråde

Tråde tillader separat udførelse inde i et adresseplacering, hvilket betyder at du kan dele datavariabler forekomster af objekter meget nemt, men det betyder også, at du løber ind i mange flere synkroniseringsproblemer. Disse er smertefulde, og som du kan se fra det forskydende antal api-funktion involverede ikke et lysfag. Tråd er en lettere vægt på vinduer og derefter behandles og som sådan springer op og ned hurtigere og bruger mindre ressourcer til at vedligeholde. Trådene lider også i, at en tråd kan få hele processen til at fejle. [7]





Processer

Processen har hver sin egen adresseplads og som sådan beskytter sig mod at blive bragt ned af en anden proces, men mangler evnen til nemt at kommunikere. Enhver kommunikation vil nødvendigvis indebære en form for IPC (Rør, TCP, ...).


Koden behøver ikke at være i en anden eksekverbar, kun to tilfælde skal køre.

Andre referencer 4


Det ville gøre tingene værre. Når du skifter tråde, skal CPU'en udskifte kun få registre. Da alle tråde i en proces deler samme hukommelse, er der ingen grund til at skylle cachen, men når du skifter mellemliggende processer, skifter du også kortlagt hukommelse. Derfor skal CPU'en skylle L1-cachen. Det er smertefuldt.


(L2-cachen er fysisk kortlagt, dvs. bruger hardwareadresser. De ændrer sig ikke selvfølgelig.)