Concurrency
49 belangrijke vragen over Concurrency
Noem de vier voorwaarden voor het optreden van deadlock.
- Mutual exclusion: exclusief gebruik van resources.
- Incremental acquisition: een proces houdt eerder verkregen resources vast terwijl het wacht op een nieuwe resource.
- No preemption: resources kunnen niet van een proces ontnomen worden.
- Circular waiting: er is een cirkel van processen en resources waarin elk proces wacht op resources die door een volgend proces in de cirkel worden vastgehouden.
[T10.3.3.]
Noem vier benaderingen voor het omgaan met deadlock.
- Ignore deadlocks.
- Detect deadlocks and recover from them.
- Prevent deadlocks, door een of meer voorwaarden voor het optreden van deadlock te verwijderen.
- Avoid deadlocks, door bij de toewijzing van resources rekening te houden met de toekomstige vraag naar resources.
[T10.3.3]
Wat is een 'sufficient condition' voor onafhankelijke processen?
Het ene proces kan geen variabelen wijzigen die door het andere proces geïnspecteerd of gewijzigd worden.
[T10.4.1]
- Hogere cijfers + sneller leren
- Niets twee keer studeren
- 100% zeker alles onthouden
Wat wordt bedoeld als een parallel programma de 'safety property' heeft?
Een parallel programma heeft de safety property als zijn kritieke secties in de tijd gezien niet overlappen. Alle opdrachten met betrekking tot een resource hebben een normaal, sequentieel effect.
[T10.4.2]
Wat wordt verstaan onder bounded nondeterminism?
Bounded nondeterminism houdt in dat de uitkomst van een berekening weliswaar onvoorspelbaar is, maar binnen een vast bereik van uitkomsten valt.
[T10.4.2]
Wat is een belangrijk verschil tussen een heavyweight proces een leightweight proces?
Een heavyweight proces staat op zichzelf en heeft zijn eigen resources, terwijl een leightweight proces (thread) deel uitmaakt van een ander proces en gebruikt maakt van de resources van dit andere proces.
Context switching tussen heavyweight processen geeft aanzienlijk meer overhead dan context switching tussen threads.
[T10.5]
Op welke wijze is in Java het monitor-concept gerealiseerd?
In tegenstelling tot gewone monitors heeft een Java-monitor maar één conditievariabele (de semafoor) en één wait-set.
Een ander verschil dat na een signal-operatie (notify) een willekeurig proces uit de wait-set wordt gehaald, dus niet per se het proces op kop van de wait-set.
[C11.3.1]
Wat wordt bedoeld met gestructureerd parallel programmeren?
[C10.3]
Noem een voordeel van binaire semaforen ten opzichte van spin locks.
[C9.5.5]
Noem drie redenen voor het gebruik van concurrency
- Het verhogen van de snelheid van de uitvoering van programma's;
- Het modelleren van simultane aspecten in de werkelijkheid;
- De beschikbaarheid van moderne computerarchitecturen die parallellisme ondersteunen
Noem drie nadelen van het gebruik van events voor het programmeren van communicatie tussen processen
- De wait- en signaloperaties zijn niet commutatief; een wait-operatie moet altijd vooraf gaan aan een signal-operatie;
- Na een signal-operatie worden alle wachtende processen hervat, terwijl er uiteindelijk maar één proces verder kan.
- Events bieden geen oplossing voor wederzijdse uitsluiting van processen.
Noem twee alternatieven voor communicatie tussen processen zonder gemeenschappelijk geheugen
- Message passing
- Remote procedure calls/remote method invocation
Noem drie concepten om gestructureerd parallel programmeren mogelijk te maken
- Conditionele kritieke gebieden
- Monitors
- Rendezvous
Noem een voordeel en een nadeel van message passing ten opzichte van spin locks, events en semaforen
Nadeel: grotere overhead.
[T10.5.6]
Noem een voordeel van remote procedure calls ten opzichte van message passing
[T10.5.7]
Noem een nadeel van het gebruik van conditionele kritieke gebieden
[T10.6.1]
Noem een voordeel van monitors ten opzichte van conditionele kritieke gebieden
[T10.6.2]
Noem een voordeel van conditionele kritieke gebieden ten opzichte van monitors
[T10.6.2]
Noem een voordeel van rendezvous ten opzichte van message passing en remote procedure calls
[T10.6.3]
Wat is het verschil tussen een synchronized opdracht en een synchronized clausule?
Een synchronized clausule wordt toegevoegd aan de signatuur van een methode om ervoor te zorgen dat de methoden van het betreffende proces maar door één proces tegelijk uitgevoerd kunnen worden.
[C11.2]
Noem vier problemen die parallelle programma's kunnen vertonen
- Parallelle programma's kunnen non-deterministisch zijn
- Parallelle programma's kunnen snelheidsafhankelijk zijn
- Er kan deadlock optreden
- Er kan starvation optreden
Welke drie groepen van processen kunnen we onderscheiden op grond van de interacties tussen de processen?
- Onafhankelijke processen
- Wedijverende processen: de processen eisen beide exclusieve toegang tot een gemeenschappelijke hulpbron
- Communicerende processen: het ene proces proces produceert data die het andere proces consumeert
Wat is het belangrijkste nadeel van primitieve operaties op laag niveau als spin locks, events en semaforen?
[C9.5]
Noem twee mogelijkheden om de oorzaken van deadlock weg te nemen
- Eliminate incremental acquisition: eisen dat een proces alle hulpbronnen in één keer claimt
- Eliminate circulair waiting: de hulpbronnen kunnen alleen in een bepaalde volgorde worden aangevraagd
Noem drie verschillen tussen rendezvous in Ada en remote procedure calls
- Een procedure-aanroep wordt direct verwerkt, terwijl een entry-aanroep moet wachten tot een rendezvous met de aangeroepen task plaatsvindt.
- Een proces kan een procedure aanroepen die nog in uitvoering is door een ander proces, terwijl een accept-opdracht slechts door één proces tegelijk wordt verwerkt.
- De volgorde van afhandeling van procedureaanroepen wordt bepaald door de aanroepende processen, terwijl de volgorde van afhandeling van entry-aanroepen door het aangeroepen proces wordt bepaald.
Geef een voordeel van rendezvous in Ada boven remote procedure calls
De volgorde van afhandeling van entry-aanroepen wordt bepaald door het aangeroepen proces, dat verantwoordelijk is voor de verwerking van de accept-opdrachten. Het aangeroepen proces kan garanderen dat de communicatie met de verschillende zenders ordelijk verloopt.
[C10.3.3]
Hoe kunnen accept-opdrachten worden gebruikt voor het programmeren van wederzijdse uitsluiting?
[C10.3.3]
Noem twee manieren (op laag niveau) om wederzijdse uitsluiting van kritieke secties van twee wedijverende processen te programmeren
- Met behulp van de spin lock-operaties acquire en relinquish;
- Het gebruik van een (binaire) semafoor met de operaties wait en signal
Geef het verschil aan tussen directe en indirecte message passing
We spreken van indirecte message passing als verschillende processen een afzonderlijk communicatiekanaal met een eigen naam delen. Twee processen kunnen dan alleen via dit kanaal berichten uitwisselen.
[C10.zelftoets]
Beschrijf in het kort de werking van een rendezvous-systeem
- Ongebufferde, synchrone message passing;
- Zender en ontvanger moeten op elkaar wachten;
- Het moment waarop de ontvanger in staat is om een bericht van de zender in ontvangst te nemen wordt ontmoetingspunt of rendezvous genoemd;
- Communicatie via een eenrichting- of tweerichtingenkanaal.
Wat is Software Transactional Memory (STM)?
STM is geïnspireerd door databasetransacties.
[C11.bijlage 2]
Noem zeven nadelen van programmeren met locks en conditievariabelen
- Vergeten om een lock te nemen
- Teveel locks nemen
- De verkeerde locks nemen
- De locks in een verkeerde volgorde nemen
- Foutherstel is lastig te realiseren
- Vergeten om te signaleren of om een conditievariabele opnieuw te testen
- Locks en conditievariabelen gaan niet samen met modulair programmeren
Wat betekent de terugkeerwaarde IO() in Haskell?
[C11.bijlage 2]
Waar wordt in Haskell de 'do-notation' voor gebruikt?
[C11.bijlage 2]
Noem twee voorbeelden van side effects in Haskell
- Input/Output
- Wijzigen van de waarde van een veranderbare variabele
Wat betekent de aanduiding IORef t in Haskell?
[C11.bijlage 2]
Waar wordt in Haskell de functie forkIO voor gebruikt?
[C11.bijlage 2]
Noem drie redenen waarom in Haskell actions (side effects) expliciet worden gedefinieerd.
- Haskell is primair een functionele taal
- Er wordt zichtbaar gemaakt of een functie wel of geen side effects heeft
- Actions zijn eersteklas waarden
Wat is het effect van het sleutelwoord atomically in Haskell?
NB. Een actie is een functie met side effects.
[C11.bijlage 2]
Welke twee garanties biedt het gebruik van het sleutelwoord atomically?
- Atomicity: het effect van de betreffende acties wordt in één keer zichtbaar voor andere threads
- Isolation: de toestand van het systeem wordt tijdens het uitvoeren van de acties gefixeerd en kan dus niet beïnvloed worden door andere threads.
Wat wordt bij STM bedoeld met een STM-actie?
STM is net als IO een geparametriseerd type voor acties met side effects. De enige neveneffecten zijn in het geval van STM het lezen of schrijven van een waarde van het type TVar.
STM-acties en 'gewone' acties kunnen niet in één block gecombineerd worden, tenzij de gewone acties atomically worden uitgevoerd.
[C11.opgave 11.8]
Waarom moet in een Java-monitor een aanroep van methode wait in een while-opdracht staan?
[C11.zelftoets]
Wanneer moet in een Java-monitor de methode notifyAll worden gebruikt in plaats van de opdracht notify?
[C11.zelftoets]
Wat is het verschil tussen een STM-action en gewone action?
Beide soorten actions hebben side effects, maar bij een STM-action zijn deze beperkt tot het lezen en schrijven van TVar's.
[C11.bijlage 2]
Hoe kan bij STM zonder locks te gebruiken worden voorkomen dat andere threads TVar's wijzigen?
Dit wordt niet voorkomen. Als na het uitvoeren van een block met STM-actions uit de transaction log blijkt dat TVar's door andere threads zijn gewijzigd, wordt het proces herhaald. Pas als de TVar's niet meer zijn gewijzigd, worden de acties uit transaction definitief uitgevoerd (commit).
[C11.bijlage 2]
Wat maakt Haskell meer geschikt voor het programmeren van parallellisme dan andere (imperatieve) talen?
- Haskell maakt onderscheid tussen code met side effects en code zonder side effects
- Actions zijn eersteklas waarden
- Threads zijn uiterst lichtgewicht
[C11.bijlage 2]
STM biedt betere mogelijkheden voor modulair programmeren omdat het niet nodig is om locks te gebruiken. Waarom zijn locks niet nodig?
Tijdens het uitvoeren van een atomatically-block worden alle acties met betrekking tot TVar's geregistreerd in een logfile. Pas als blijkt dat de TVar's niet door andere threads zijn gewijzigd worden alle acties uit de log in één keer, dus atomair, uitgevoerd (commit).
[C11.bijlage 2]
Noem vier voordelen van STM
- STM is modulair: STM-acties kunnen worden samengevoegd zonder omkijken naar de code
- STM-acties kunnen worden samengevoegd tot een samengestelde actie met dezelfde atomaire eigenschappen
- Er wordt geen gebruik gemaakt van locks met bijbehorende nadelen
- Het typesysteem garandeert dat TVar's niet buiten een atomair block gebruikt kunnen worden
[C11.bijlage 2]
In welk geval kan wel een synchronized-clausule, maar geen synchronized opdracht worden gebruikt?
[C112]
De vragen op deze pagina komen uit de samenvatting van het volgende studiemateriaal:
- Een unieke studie- en oefentool
- Nooit meer iets twee keer studeren
- Haal de cijfers waar je op hoopt
- 100% zeker alles onthouden