Delte ressurser, konflikter, delt tilgang - 1

"Hei, Amigo! Jeg vil fortelle deg om deling av ressurser. På tvers av forskjellige tråder, naturligvis.

"Jeg fortsetter å snakke om problemene som oppstår når man jobber med flere tråder og hvordan man løser dem. Dette betyr ikke at bruk av tråder er dårlig. Tråder er et veldig kraftig verktøy. Faktisk lar de deg gjøre programmet ditt raskere og jevnere mer pålitelig. Jo mer komplekst et program er, jo flere tråder og ulike uavhengige deler har det."

"Å dele opp et program i uavhengige (løst koblede) deler er veldig fordelaktig."

"Tenk deg at programmet ditt er internt delt inn i 100 tråder. Men du har bare en dual-core prosessor. Dette betyr at det i gjennomsnitt vil bli utført 50 tråder på hver kjerne."

"Hvis du trenger å øke programmets ytelse, kjøper du bare en dobbelprosessorserver og et par søte prosessorer for det. Dette kan gi deg opptil 32 kjerner, noe som gir en ytelsesøkning på 2-20 ganger. Avhengig av antallet av virkelig uavhengige deler den er delt inn i."

"Dette er en av grunnene til at Java dominerer i bedriftsutvikling. Hvis en bedrift har et komplekst internt program skrevet av 20 utviklere, så er det mye billigere å kjøpe en annen server enn å doble programmets ytelse gjennom optimalisering."

"Så det er det det handler om."

"Men! Hver gang en utvikler bestemmer seg for å bruke en annen tråd, løser han ett problem og lager to. Flere og flere tråder vil ikke uendelig øke programmets ytelse."

"For det første har ethvert program arbeid som ikke kan brytes fra hverandre og kjøres parallelt på forskjellige tråder. For det andre kjøres alle trådene på samme prosessor. Jo flere tråder du har, jo tregere fungerer hver enkelt."

"Og, viktigst av alt, bruker tråder ofte de samme objektene (vanligvis kalt 'delte ressurser')."

"For eksempel ønsker en tråd å lagre informasjon om arbeid den har fullført i en fil. Hvis det er flere slike tråder og de ønsker å skrive informasjon til samme fil, vil de forstyrre hverandre. For å forhindre at filen blir en rotete rot, tilgangen til filen er begrenset, dvs. mens en tråd bruker filen, venter andre."

"Ja, jeg husker det. Du gjør det ved å bruke det synkroniserte nøkkelordet."

"Helt riktig."

"Og hva om trådene skriver til forskjellige filer?"

"Formelt sett er dette forskjellige objekter, men de er sannsynligvis på samme harddisk."

"Så, er det virkelig mulig å parallellisere noe inne i prosessoren?"

"Teknisk sett, ja, men så snart tråden din trenger noe i tillegg til dataene den har, kan det hende at noe allerede er opptatt av en annen tråd - og tråden din må vente."

"Vel, hva skal jeg gjøre da? Hvordan vet jeg om jeg skal lage mange tråder eller ikke?"

"Dette bestemmes direkte av programmets arkitektur. Hvert prosjekt har sin egen "arkitekt" som kjenner alle "ressursene" som brukes i programmet, kjenner deres begrensninger og hvor godt/dårlig de er parallellisert."

"Og hvis jeg ikke vet?"

"Det er to alternativer:"

a) arbeide under tilsyn av noen som gjør det

b) få noen klumper å finne ut av det på egen hånd

"Jeg er en robot: Jeg får ikke klumper - bare bulker."

"Vel da, få noen bulker."

"Jeg skjønner. Takk. Du oppklarte noen ting som jeg allerede hadde begynt å lure på."