Parallele Prozesse Flashcards
Was ist Nebenläufigkeit und was für Spezialfälle gibt es?
Prozesse, die unabhängig voneinander bearbeitet werden können
Parallele Prozesse = nebenläufig + gleichzeitig
Gegenteil: sequentielle Verarbeitung
Wieso kann es zwischen nebenläufigen Prozessen zu Konflikten kommen?
Parallele Prozesse können indirekt voneinander abhängig sein. Aufgrund knapper Betriebsmittel können Konflikte auftreten. Betriebsmittel können nur von einem Prozess auf einmal benutzt werden.
Was ist Konfliktmanagement?
Sicherstellen, dass es bei Konfliktfällen ein Lösungsvorgehen gibt
Erkläre das Monitorkonzept
erlaubt es einen Codeabschnitt zu definieren, der nur von genau einem Prozess auf einmal ausgeführt werden darf
Was ist ein kritischer Abschnitt?
Zustand, bei dem ein Betriebsmittel nur von genau einem Vorgang in Anspruch genommen werden darf
Verklemmung/Deadlock
Zyklische Wartesituation, Prozesse warten auf gegenseitig reservierte Ressourcen
Schutz durch Prozesskommunikation
Erkläre den Unterschied zwischen Task (schwerer Prozess) und Thread (leichter Prozess)
eigenständiges Programm vs. Ablauf innerhalb eines Programms, das parallel zu anderen Abläufen ausgeführt werden kann
Methoden der Konfliktlösung
- Preclaiming: alle Ressourcen müssen vor Beginn gesperrt werden, sonst alle freigegeben und nochmal versucht
- Time-Out-Verfahren: Prozesse, die auf Freigabe warten, müssen nach einer bestimmten Zeit ihre reservierten Betriebsmittel aufgeben
- Prioritäten: Prozesse bekommen je nach Priorität Betriebsmittel
Erkläre Synchronisation
Koordination paralleler Prozesse aufeinander (zeitlich)
inklusiv: Gleichzeitigkeit notwendig (Meeting Room)
exklusiv: Verhinderung von Gleichzeitigkeit (Monitor)
Monitore in Java
Stichwort “synchronized”: erstellt einen Monitor für einen kritischen Bereich
- public synchronized void … : gleichzeitig darf nur ein Thread auf den gesamten Methoden innerhalb des Monitors dieses Objekts zugreifen
- public static synchronized void … : gilt für alle Objekte der Klasse
- wait(): legt Thread schlafen und gibt Monitor frei
- notify(): weckt Thread, der wegen wait() schläft wieder auf
- notifyAll(): weckt alle wartenden Threads auf –> Chancengleichheit, wer den Monitor belegt