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