Gå til innhold

Hvor er det hensiktsmessig å ha tråder


Anbefalte innlegg

Hei

Har nettopp hatt tråder som en del av pensum og lurer på hvor er det det er hensiktsmessig å ha tråder? Tenker da på løkker. F.eks Hva hvis det skal kjøres 1000 metoder 100 ganger hver? Hvor vil det være like greit å la det hele gå sin gang, istede for å kjøre det samtidig.

Endret av Zic0
Lenke til kommentar
Videoannonse
Annonse

Hvis ingen blir lei av å vente, kan det være like greit å la det «gå sin gang». Hvis du derimot skal regne ut meningen med life-the-universe-and-everything kan det være greit å la det putre og gå i en egen tråd, mens gui fortsetter videre og brukeren kan gjøre noe matnyttig. Hvis du har beregninger som kan kjøres i paralell kan programmet ditt utnytte flerkjerneprosessorer bedre dersom du har skrevet disse beregningene som tråder.

 

Hvaslags pensum er det du har lest som ikke forklarer selve pointet med tråder? Eller har du ikke fått med deg pointet :o)

Endret av quantum
Lenke til kommentar

Jeg har jo fått med meg pointet. Nå snakker jeg selvfølglig om å kjøre paralellberninger som tråder. Det bør jo være en viss mengde med beregninger for at det skal være nyttig? Hvis det er 3 beregninger man skal gjøre så regner jeg jo med at det går greit å ta dem etter hverandre. Bare lurte på hvor mange beregninger det burde være før man bruker tråder til det...

Lenke til kommentar

Det er heller ikke alle problemer som kan løses med flere tråder. Men si at dersom det er en løkke som kjører ~>1000 ganger, og det er mulig å parallerlisere oppgaven, burde det gjøres. Noen ganger må derimot oppgaven sees fra en annen måte for å paralleliseres. Eksempelvis i Glorg som jeg lager for tiden, deles helle programmet i 4 tråder, en som bare rendrer så lenge det er noe å rendre, en som behandler logikk, en som behandler fysikk og en som behandler lyd. Alt kunne blitt dyttet i én tråd, men på en 4 kjerners prosessor vil dette gi 1/4 del av ytelsen i forhold til å fordele dette utover flere tråder.

En kan derimot si at fysikk er avhengig av logikken, men ved å vinkle oppgaven annerledes, kan en si at logikken skal hinte mot hva fysikken skal gjøre, og ikke bestemme dette. I min motor gjøres dette ved at logikken forteller kun hvor et objekt vil flytte seg (gi kraft i en retning) mens fysikkmotoren gjør den faktiske forandringen. Grafikkmotoren på sin side vil bare lese av resultatet fra logikk og fysikktråden og vise et bilde basert på det. Lydtråden vil utelukkende streame data til lydkortet og køe opp lydavspilling(lyd er dog ikke implementert enda)

 

Det er dog ingen fasitløsning, men tråding er ofte fordelaktig, men på små datamenger (4 tall for eksempel) så vil opprettelsen av trådene kanskje være dyrere enn selve beregningen. Som TheMaister skrev: benchmarking er din venn.

Det er ikke alltid løsningen er å dele opp i tråder. Selv antall tråder kan være et viktig faktum: flere er ikke nødvendigvis bedre.

Lenke til kommentar
  • 2 uker senere...

En ting er sikkert. Driver du med GUI, finner du deg ofte i en situasjon hvor applikasjonen din henger. Kanskje fordi den har gått inn i en ventetilstand for å vente på data fra for eksempel en socket, eller at den får mye å regne ut. Som for eksempel en funksjon som skal regne ut de 1 million første primtallene, før den returnerer.

 

Derfor benyttes det svært ofte en egen tråd for GUI. Litt mer teknisk vil det i de fleste tilfeller tilsvare at du har en egen tråd som hele tiden kjører gjennom en messageloop og invokerer de andre trådene i applikasjonen din.

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...