Delte ressourcer, konflikter, delt adgang - 1

"Hej, Amigo! Jeg vil gerne fortælle dig om deling af ressourcer. På tværs af forskellige tråde, naturligvis.

"Jeg bliver ved med at tale om de problemer, der opstår, når man arbejder med flere tråde, og hvordan man løser dem. Det betyder ikke, at det er dårligt at bruge tråde. Tråde er et meget kraftfuldt værktøj. Faktisk lader de dig gøre dit program hurtigere og mere jævnt. mere pålideligt. Jo mere komplekst et program er, jo flere tråde og forskellige uafhængige dele har det."

"Det er meget gavnligt at opdele et program i uafhængige (løst koblede) dele."

"Forestil dig, at dit program internt er opdelt i 100 tråde. Men du har kun en dual-core processor. Det betyder, at der i gennemsnit vil blive udført 50 tråde på hver kerne."

"Hvis du skal øge programmets ydeevne, køber du bare en dual-processor server og et par søde processorer til det. Dette kan få dig op på 32 kerner, hvilket giver et 2-20 gange løft i ydeevnen. Afhængig af antallet af virkelig uafhængige dele, den er opdelt i."

"Det er en af ​​grundene til, at Java dominerer inden for virksomhedsudvikling. Hvis en virksomhed har et komplekst internt program skrevet af 20 udviklere, så er det meget billigere at købe en anden server end at fordoble programmets ydeevne gennem optimering."

"Så det er det, det hele handler om."

"Men! Hver gang en udvikler beslutter sig for at bruge en anden tråd, løser han et problem og opretter to. Flere og flere tråde vil ikke uendeligt øge programmets ydeevne."

"For det første har ethvert program arbejde, der ikke kan brydes fra hinanden og køre parallelt på forskellige tråde. For det andet udføres alle trådene på den samme processor. Jo flere tråde du har, jo langsommere arbejder hver enkelt."

"Og vigtigst af alt bruger tråde ofte de samme objekter (normalt kaldet 'delte ressourcer')."

"For eksempel vil en tråd gemme information om det arbejde, den har udført i en fil. Hvis der er flere sådanne tråde, og de vil skrive information til den samme fil, vil de forstyrre hinanden. For at forhindre, at filen bliver en rodet rod, adgangen til filen er begrænset, dvs. mens en tråd bruger filen, venter andre."

"Ja, det kan jeg huske. Det gør du ved at bruge det synkroniserede nøgleord."

"Lige præcis."

"Og hvad hvis trådene skriver til forskellige filer?"

"Formelt er det forskellige objekter, men de er sandsynligvis på den samme harddisk."

"Så er det virkelig muligt at parallelisere noget inde i processoren?"

"Teknisk, ja, men så snart din tråd har brug for noget udover de data, den har, er der muligvis noget, der allerede er optaget af en anden tråd - og din tråd bliver nødt til at vente."

"Nå, hvad skal jeg så gøre? Hvordan ved jeg, om jeg skal lave mange tråde eller ej?"

"Dette bestemmes direkte af dit programs arkitektur. Hvert projekt har sin egen 'arkitekt', som kender alle 'ressourcerne', der bruges i programmet, kender deres begrænsninger, og hvor godt/dårligt de er paralleliseret."

"Og hvis jeg ikke ved det?"

"Der er to muligheder:"

a) arbejde under opsyn af en person, der gør det

b) få nogle klumper ved at finde ud af det på egen hånd

"Jeg er en robot: Jeg får ikke klumper - kun buler."

"Nå, så få nogle buler."

"Jeg forstår det. Tak. Du har præciseret nogle ting, som jeg allerede var begyndt at undre mig over."