Concurrent programming Jämlöpande programmering

Concurrent programming
Jämlöpande programmering
Jan Erik Moström, Department of Computing Science, Umeå University - [email protected]
Vad handlar detta om?
• Flera saker ska hända samtidigt
• Olika typer
• Samma sak på flera ställen
• Olika saker på flera ställen
• Olika varianter
• “Sant jämlöpande” - flera fysiska beräkningsenheter
• “Logiskt jämlöpande” - simulering av flera fysiska
beräkningsen
• På olika nivåer
• Instruktioner (dvs maskininstruktioner)
• Uttryck
• Funktioner/procedurer/metoder
• Program
Jan Erik Moström
Intressant (för kursen)
• High Performance Computing - försöka vrida ut
varenda droppe av prestanda ur en dator. Varje
klockcykel är av intresse. Inte intressant för
kursen.
• Många olika saker som ska göras samtidigt.
Mycket intressant på flera olika plan.
Jan Erik Moström
Varför jämlöpande?
• Verkligheten är parallell
• Bättre effektivitet
• Fler beräkningsenheter
• I/O
• Bättre respons från systemet
• Användargränssnitt använder trådar för att få bättre
respons från systemet (inte hastighet i exekvering
utan i reaktionstid)
• Min personliga åsikt: kognition/organisation
Jan Erik Moström
Hur implementera?
• Två huvudvarianter
• Processer - helt separata program som
kommunicerar via någon kanal, t.ex. delat minne,
meddelanden. Kan ligga på separata datorer.
• Trådar - delar minne och andra resurser. Enkel
kommunikation genom t.ex. variabler, delat minne,
meddelanden. Ligger på samma dator (olika cores
möjligt).
• Flera olika mellanting
Jan Erik Moström
Jan Erik Moström
Vad är problemet?
• Synkronisering av processer/trådar
• Hantering av resurser/samarbete
• Vem ska köra när - schemaläggare i OS (oftast)
• Oftast: processer = dyra, trådar = billiga
• Deadlock, svält, race condition
• Tillstånd: running, ready, blocked
• “Tänka rätt”
Jan Erik Moström
Saker av intresse
• Hur gör man synkroniseringen
• Semaforer
• Monitorer
• Message passing
• Hur ska schemaläggaren fungera
• När ska processer/trådar skapas/startas och
avslutas/tas bort
Jan Erik Moström
Bibliotek eller del av språket?
• Fördelar med bibliotek
• Nackdelar med bibliotek
• Fördelar med en del av språket
• Nackdelar med en del av språket
Jan Erik Moström
Semaforer
• En datastruktur
• Två operationer som inte kan avbrytas
• Räknare
• Wait
• >0 => Räkna ner & fortsätt exekvering
• =0 => Blockera processen/tråden
• Signal
• Ingen väntar => +1
• Annars => Starta någon av de som väntar
• Enkelt - kan impl. med en minimum av kod
• Negativt - Programmeraren ansvarar för allting,
inga kontroller, lätt att missa, skalar dåligt.
Jan Erik Moström
Monitorer
• Oftast en språkkonstruktion
• Bara en process/tråd kan exekvera vid en given
tidpunkt
• Finns kommandon för att signalera till andra
trådar och blockera sig själv
• Några olika varianter
• Exempel: synchronized i Java
• Nackdel: låser man för mycket?
Jan Erik Moström
Meddelandebaserad
• Enkelt att förstå
• Skicka meddelanden
• Synkron eller asynkron, eller bägge
• Kommandon för att skicka/ta emot
• Ada har stöd för detta (kan också implementeras
via bibliotek)
Jan Erik Moström
Prestanda
• Hårdvara
• Exekvering
• Kognitivt
• Svårare?
• Lättare?
• Bägge
Jan Erik Moström
Exception handling
• Problemet är hur man ska hantera fel
• T.ex. inmatningsfel - bör hanteras i programlogiken
• T.ex. division med 0 - blir bökigt om man gör det
själv, CPU flaggar
• T.ex. fel på hårddisk, närverk - blir bökigt om man
gör det själv
• Hur hantera detta
• Variant 1 - felkoder. Fungerar men blir lite bökigt
• Variant 2 - speciell kod. Fungerar men blir lite rörigt
• Variant 3 - språkstöd. Vanligast idag try-catch
Jan Erik Moström
Exception handling
• Ger tydligare/enklare kod
• Lättare att tänka/prata om fel
• Hantera felen på olika nivåer (kan fortfarande att
göra bra felhantering)
Jan Erik Moström
Att tänka på
• Deklaration - hur ska det se ut
• Parametrar - hur skiljer man olika fel
• Aktivering - två olika varianter
• Hur hittar man rätt felhanterare
• Hur hanterar man olika “nivåer i koden”
• Vad händer när felhanteraren är klar?
• Finally, finalization, etc
Jan Erik Moström
Event handling
• “Reaktiv programmering”
• “Kodsnuttar som reagerar på olika händelser”
• Alla system som ska hantera olika händelser
• Oftast
• kort kod som ska exekvera snabbt
• är mycket som ska göras - starta en ny tråd
• påminner mycket om jämlöpande programmering
Jan Erik Moström