bild
Skolan för
elektroteknik
och datavetenskap

Uppgift 9 våren 2014

Uppgiften ska lämnas till din övningsledare på övningen den 11/4 (10/4 för pallinda14).

  • Uppgifterna ska lämnas in på papper. E-post accepteras ej.
  • Samtliga papper ska häftas samman eller lämnas in i en plastficka.
  • Handskriven text accepteras ej.

Lämna in uppgiften med rätt försättsblad:

För godkänt måste du ha gjort samtliga deluppgifter. Det är tillåtet att göra enstaka fel och misstag men det är viktigt att du försöker lösa samtliga uppgifter.

Hemuppgift

Läs avsnitt 6-10 i Fundamentals of concurrent programming.

Skriftlig uppgift

Matchning

Ta en titt på programmet matching.go från avsnitt 9 i kurslitteraturen. Förklara vad som händer och varför det händer om man gör följande ändringar i programmet. Prova att först tänka ut vad som händer och testa sedan din hypotes genom att ändra och köra programmet.

  • Vad händer om man tar bort go-kommandot från Seek-anropet i main-funktionen?
  • Vad händer om man byter deklarationen wg := new(sync.WaitGroup) mot var wg sync.WaitGroup och parametern wg *sync.WaitGroup mot wg sync.WaitGroup?
  • Vad händer om man tar bort bufferten på kanalen match?
  • Vad händer om man tar bort default-fallet från case-satsen i main-funktionen?

Tips: Tänk efter i vilken ordning instruktionerna utförs och vad som händer för vektorer av olika längd.

Fraktala bilder

Filen julia.go innehåller ett program som skapar bilder och skriver ut dem på fil. Programmet är ganska långsamt. Din uppgift är att fördela beräkningarna så att de sker parallellt på samtliga tillgängliga CPU:er. Använd idéerna från exemplet i avsnitt 10 i kurslitteraturen som utgångspunkt.

Du får gärna ändra i programmet, till exempel genom att använda andra funktioner och andra färgläggningar, men du ska bara lämna in den parallella versionen av ursprungsprogrammet. Glöm inte "go fmt".

Hur många CPU:er använder ditt program? Hur mycket snabbare blir din parallella version?

Väderstation

Filen server.go innehåller ett program som simulerar tre stycken oboeroende servrar som visar temperaturen på KTH. Resultatet publiceras på adresserna

  • http://localhost:8080
  • http://localhost:8081
  • http://localhost:8082

Starta programmet och prova sedan att besöka de tre adresserna i din webbläsare. Du kommer att upptäcka att de tre tjänsterna inte är särskilt pålitliga: de är ganska långsamma och ibland får du inget svar alls. Det kan också hända att du får felmeddelandet Service unavailable.

Din uppgift är att skriva en klient som samtidigt ställer en fråga till alla servrarna och avbryter sökningen så snart någon av de tre har svarat med en korrekt temperatur. Frågan ska dessutom avbrytas om ingen har svarat inom utsatt tid. Filen client.go innehåller ett kodskelett som du ska utgå från.

  • Funktionen Read innehåller två lömska buggar. Beskriv i detalj vad som är fel.
  • Skriv en korrekt Read-funktion. Glöm inte dokumentationskommentaren.
  • Implementera funktionen Multiread.
  • Lämna in en korrekt formatterad utskrift av hela klientprogrammet.
Copyright © Sidansvarig: Stefan Nilsson <snilsson@nada.kth.se>
Uppdaterad 2014-02-16