Delade resurser, konflikter, delad åtkomst - 1

"Hej, Amigo! Jag vill berätta om att dela resurser. I olika trådar, naturligtvis.

"Jag fortsätter att prata om problemen som uppstår när man arbetar med flera trådar och hur man löser dem. Det betyder inte att det är dåligt att använda trådar. Trådar är ett mycket kraftfullt verktyg. De låter dig faktiskt göra ditt program snabbare och jämnare mer tillförlitlig. Ju mer komplext ett program är, desto fler trådar och olika oberoende delar har det."

"Att dela upp ett program i oberoende (löst kopplade) delar är mycket fördelaktigt."

"Föreställ dig att ditt program internt är uppdelat i 100 trådar. Men du har bara en dual-core processor. Det betyder att i genomsnitt 50 trådar kommer att köras på varje kärna."

"Om du behöver öka programmets prestanda köper du bara en server med dubbla processorer och ett par söta processorer för det. Detta kan ge dig upp till 32 kärnor, vilket ger en 2-20 gånger högre prestanda. Beroende på antalet av verkligt oberoende delar den är uppdelad i."

"Detta är en av anledningarna till att Java dominerar inom företagsutveckling. Om ett företag har ett komplext internt program skrivet av 20 utvecklare så är det mycket billigare att köpa en annan server än att fördubbla programmets prestanda genom optimering."

"Så det är vad det handlar om."

"Men! Varje gång en utvecklare bestämmer sig för att använda en annan tråd, löser han ett problem och skapar två. Fler och fler trådar kommer inte oändligt att öka programmets prestanda."

"För det första har alla program arbete som inte kan brytas isär och köras parallellt på olika trådar. För det andra körs alla trådar på samma processor. Ju fler trådar du har, desto långsammare fungerar var och en."

"Och viktigast av allt, trådar använder ofta samma objekt (vanligtvis kallade 'delade resurser')."

"Till exempel vill en tråd spara information om arbete den har slutfört i en fil. Om det finns flera sådana trådar och de vill skriva information till samma fil kommer de att störa varandra. För att förhindra att filen blir en virrig röra, åtkomst till filen är begränsad, dvs medan en tråd använder filen, väntar andra."

"Ja, jag kommer ihåg. Det gör du med det synkroniserade nyckelordet."

"Helt rätt."

"Och vad händer om trådarna skriver till olika filer?"

"Formellt är det här olika objekt, men de ligger förmodligen på samma hårddisk."

"Så, är det verkligen möjligt att parallellisera något inuti processorn?"

"Tekniskt sett, ja, men så fort din tråd behöver något förutom de data den har, kan det vara något som redan är upptaget av en annan tråd - och din tråd måste vänta."

"Jaha, vad ska jag göra då? Hur vet jag om jag ska göra många trådar eller inte?"

"Detta bestäms direkt av ditt programs arkitektur. Varje projekt har sin egen "arkitekt" som känner till alla "resurser" som används i programmet, känner till deras begränsningar och hur bra/dåligt de är parallelliserade."

"Och om jag inte vet?"

"Det finns två alternativ:"

a) arbeta under överinseende av någon som gör det

b) få några klumpar att lista ut det på egen hand

"Jag är en robot: jag får inga klumpar - bara bucklor."

"Jaså, skaffa några bucklor."

"Jag förstår. Tack. Du klargjorde några saker som jag redan hade börjat undra över."