Gå til innhold

Flertråd på C++


Anbefalte innlegg

Videoannonse
Annonse
Jeg forstår ikke så godt engelsk  :no:

7956205[/snapback]

 

Da tar vi en kjapp gjennomgang på norsk også :)

 

Først og fremst, utvikling av applikasjoner med flere tråder kan være vriene saker. I motsetning til applikasjoner med én tråd, åpner man med flere tråder opp for at datastrukturer (les: variabler) kan endres / leses "samtidig". Dette kan visualiseres med at du prøver å åpne en dør samtidig som en annen prøver å lukke den -- det fungerer dårlig. Første bud ved fler-trådet utvikling er derfor det man typisk kaller synkronisering. Kort fortalt ønsker man å kunne begrense tilgangen til en datastruktur (en variabel, et funksjonskall, eller en serie funksjonskall) til én tråd av gangen. For dør-eksempelet vil man derfor avtale at den som kommer først til døra får bruke den først (f.eks. åpne den). Når førstemann har gjort fra seg, kan nummer to lukke den igjen. De tråder som ikke kommer førs ttil en ressurs, må pent finne seg i å vente på at den / de foran i køen for utført sine operasjoner, og hevet sin låsing. Mens denne ventingen pågår, er det opplagt at man ikke tjener noe særlig på å bruke flere tråder i applikasjonen sin.

 

På plattformer med bare én kjerne, eller én CPU, vil man i alle tilfeller ikke tjene noe (i form av ytelse) direkte på å bruke tråder. På denne typen plattformer vil man først og fremst ha nytte av tråder i situasjoner hvor man kan komme til å vente lenge på andre enheter, f.eks. brukerinteraksjon eller nettverkstrafikk. I en enkelt-trådet applikasjon kan man ikke gjenoppfriske brukergrensesnittet "samtidig" som tråden står i et tredjeparts nettverksbibliotek for å laste ned en fil. Med en flertrådet applikasjon vil man enkelt kunne la én tråd stå for oppdatering av brukergrensesnitt, mens den andre tar i mot data fra nettverk, bruker, eller hardware av et eller annet slag.

 

Nå skriver du at du har en multicore-CPU, og med disse kan man oppnå høyere ytelse ved bruk av flere tråder. Man må riktignok likefullt passe på å vente på tilgang til delte ressurser, så hvis to tråder bruker majoriteten av sin tid på å vente på den andre, har flertrådingen sannsynligvis ingen hensikt. I eksempelet med brukergrensesnitt og dataoverføring, vil det derimot være meget hensiktsmessig med flere tråder.

 

Helt på tampen skal det også nevnes at det finnes flere utfordringer med flertråding enn bare tilgang til delte ressurser. Flere av problemene er forsåvidt relatert til delte ressurser, men ikke nødvendigvis direkte. Det er også på sin plass å nevne at "scheduleren", dvs. den delen i operativsystemet som fordeler tiden mellom tråder, også har blitt relativt effektiv gjennom årene. Man kan derfor ikke anta at to tråder på en to-kjerners CPU vil ha dobbelt så høy ytelse som én tråd på en to-kjerners CPU. Det finnes nødvendigvis flere hundre tråder i systemet til enhver tid, så det blir aldri slik at den ene kjernen står helt uten arbeid.

 

Konkret i forhold til hvordan man gjør flertrådet utvikling i C++ er det vanskelig å komme innpå, uten å vite hvilket utviklingsmiljø du bruker. Hvilket operativsystem, utviklingsverktøy, kompilator osv. er du mest komfortabel med?

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...