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
Ontdek Study Smart

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 Java kan ieder object als monitor fungeren. Behalve een binaire semafoor, heeft ieder object tevens een wait-set. Met behulp van de methoden wait, notify en notifyAll kan communicatie tussen threads worden geprogrammeerd.
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?

Met gestructureerd parallel programmeren wordt bedoeld dat een programmeertaal besturingsstructuren biedt voor het programmeren van parallelle processen die correct gebruik van wederzijdse uitsluiting en communicatie afdwingen en op grond waarvan de vertaler (statisch) al fouten kan ontdekken.
[C10.3]

Noem een voordeel van binaire semaforen ten opzichte van spin locks.

Als een proces moet wachten op een conditie, krijgt het proces bij gebruik van een semafoor de status waiting. Bij gebruik van een spin lock houdt het proces tijdens het wachten in de busy-waiting-lus de processor bezet.
[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
[T10.1]

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.
[T10.5.4]

Noem twee alternatieven voor communicatie tussen processen zonder gemeenschappelijk geheugen

  • Message passing
  • Remote procedure calls/remote method invocation
[T10.5.6, T10.5.7]

Noem drie concepten om gestructureerd parallel programmeren mogelijk te maken

  • Conditionele kritieke gebieden
  • Monitors
  • Rendezvous
[T10.6]

Noem een voordeel en een nadeel van message passing ten opzichte van spin locks, events en semaforen

Voordeel: eenvoudiger uit te breiden naar een gedistribueerde oplossing.
Nadeel: grotere overhead.
[T10.5.6]

Noem een voordeel van remote procedure calls ten opzichte van message passing

De programmacode hoeft bij het gebruik van remote procedure calls niet gewijzigd te worden als de verdeling van functies over processen verandert. Daardoor is het programma beter te onderhouden.
[T10.5.7]

Noem een nadeel van het gebruik van conditionele kritieke gebieden

Een nadeel van conditionele kritieke gebieden is busy waiting: de await-opdracht wordt geïmplementeerd in de vorm van loop waarin de conditie waarop gewacht wordt steeds opnieuw wordt geëvalueerd.
[T10.6.1]

Noem een voordeel van monitors ten opzichte van conditionele kritieke gebieden

Een voordeel van monitors is 'loose coupling' van processen aan de gedeelde variabelen door inkapseling van deze variabelen in de monitor.
[T10.6.2]

Noem een voordeel van conditionele kritieke gebieden ten opzichte van monitors

Bij conditionele kritieke gebieden is gegarandeerd dat de conditie waarop gewacht werd niet is veranderd als het proces wordt hervat. Bij monitors in combinatie met signal-and-continue bestaat deze garantie niet.
[T10.6.2]

Noem een voordeel van  rendezvous ten opzichte van message passing en remote procedure calls

De volgorde waarin berichten worden verwerkt wordt niet bepaald door de aanroepende processen, maar door het aangeroepen proces (de server).
[T10.6.3]

Wat is het verschil tussen een synchronized opdracht en een synchronized clausule?

Een synchronized opdracht is een blok waarin gesynchroniseerd wordt op het object in de aanhef van het blok, zodat het object maar door één proces tegelijk geïnspecteerd of gewijzigd kan worden.
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
[Samenvatting blok 3]

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
[Samenvatting blok 3]

Wat is het belangrijkste nadeel van primitieve operaties op laag niveau als spin locks, events en semaforen?

De juiste werking van deze operaties berust op conventies die de programmeur in acht moet nemen, zoals de juiste volgorde van operaties. De vertaler kan niet controleren of operaties in de juiste volgorde worden uitgevoerd.
[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
[T10.3.3]

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.
[C10.3.3]

Geef een voordeel van rendezvous in Ada boven remote procedure calls

De volgorde van afhandeling van remote procedure calls wordt bepaald door de aanroepende processen. Verschillende zenders moeten met elkaar afspraken maken om de communicatie correct te laten verlopen.
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?

Een accept-opdracht kan slechts voor één proces tegelijk worden uitgevoerd. Andere processen die dezelfde entry aanroepen, wachten in de wait queue tot er opnieuw een rendezvous plaatsvindt.
[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
[C9.zelftoets]

Geef het verschil aan tussen directe en indirecte message passing

We spreken van directe message passing tussen twee processen als er een direct communicatiekanaal tussen deze processen bestaat.
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.
[C10.zelftoets]

Wat is Software Transactional Memory (STM)?

STM is een benadering voor parallel programmeren van processen met een gemeenschappelijk geheugen, waarbij modulariteit een belangrijk kenmerk is.
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
[C11.bijlage 2]

Wat betekent de terugkeerwaarde IO() in Haskell?

De terugkeerwaarde IO() duidt op een actie die bij uitvoering side effects kan hebben en een waarde van het type () retourneert.
[C11.bijlage 2]

Waar wordt in Haskell de 'do-notation' voor gebruikt?

De do-notatie construeert een actie door verschillende kleinere acties in een bepaalde volgorde samen te voegen.
[C11.bijlage 2]

Noem twee voorbeelden van side effects in Haskell

  • Input/Output
  • Wijzigen van de waarde van een veranderbare variabele
[C11.bijlage 2]

Wat betekent de aanduiding IORef t in Haskell?

IORef t is een pointer naar een veranderbare variabele die een waarde van type t bevat.
[C11.bijlage 2]

Waar wordt in Haskell de functie forkIO voor gebruikt?

De functie forkIO creëert een thread die een gegeven IO-actie uitvoert.
[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
[C11.bijlage 2]

Wat is het effect van het sleutelwoord atomically in Haskell?

Met het sleutelwoord atomically wordt een block atomic gemaakt. De acties binnen een atomic block worden atomair en in isolatie uitgevoerd.
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.
[C11.bijlage 2]

Wat wordt bij STM bedoeld met een STM-actie?

Een STM-actie is een actie van het type STM.
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?

Als een wachtende thread wordt gesignaleerd, kan het voorkomen dat een andere thread eerst de monitor krijgt (barging) en de wachtconditie wijzigt. Als daarna de gesignaleerde thread de monitor krijgt, wordt middels de while-methode de wachtconditie opnieuw gecontroleerd.
[C11.zelftoets]

Wanneer moet in een Java-monitor de methode notifyAll worden gebruikt in plaats van de opdracht notify?

We gebruiken de methode notifyAll als een wijziging van de status van de monitor van belang is voor meer dan één wachtende thread.
[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?

Als gesynchroniseerd wordt op een entiteit van een primitief type. In een synchronized opdracht kan uitsluitend een referentie naar een object worden opgenomen.
[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
Onthoud sneller, leer beter. Wetenschappelijk bewezen.
Trustpilot-logo