Nicht blockierende Synchronisation

Nicht-blockierende Synchronization ( englisch nicht-blockierend oder Auch schleusenfreien Synchronisation ) ist Eine Technik in der Informatik , um parallel Prozess zu synchronisieren, ohne dabei Bestimmt Programmabschnitte Verriegelung zu Müssen. Insbesondere Dientes sie zur Implementierung von nicht-blockierenden Struktur Datum in Parallels Systemen.

Blockierende Techniken

Um Inkonsistenzen im Ablauf von Parallel Prozess , stirbt auf Gemeinsamen Speicher zugreifen, zu vermeiden, Wird traditionell Locking -TECHNIK Wie Semaphore und Mutex eingesetzt, stirbt Kritische Abschnitt bestimmt, in Denen nur einen Prozess exklusiver zugriff auf Bestimmt Betriebsmittel erhalten. Will anderer Prozess gleichzeitig in EINER Kritischen Abschnitt eintritt, Werden Sie blockiert.

Dieser Ansatz besitzt Reihe von Nachteilen.

  • Verklemmung: Es Kann zu Verklemmungen (Deadlock) kommen, Wenn Es Gegenseitige Abhängigkeiten between Verriegelungs Gibt.
  • Effizienzverlust: Die Parallelität des Programm Wird verringert (siehe Amdahlsches Gesetz ) . In Bestimmt Fall Kann of this Strom Durch Eine feinere Granularität wo arretieren Reduziert Werden (z. B. die Latch – Dezember Zugriffs auf einzelne Elementen Ein Objekte, statt Sperrung des Gesamt objekt).
  • Fehleranfälligkeit: Die korrekte Identifizierung und Sperrung der kritischen Abschnitte ist nicht trivial und nicht fehleranfällig. Auch de Erweiterbarkeit und Wartbarkeit des Programms wird erschwert.
  • Priority Inversion: Betrachtet man das gesamte System, gibt es Probleme, dass Prioritätsinversion hinzukommt , wobeidie Prozesse höhere Priorität von einfachen Prozessen durch healten Locks aufgefangen werden können. Locks auf Systemebene beeinträchtigt im Allgemeinen auch das Echtzeit -Verhalten des Systems.

Nicht blockierende Techniken

Nicht-blockierende Synchronisationtechniken umgehen Definition sterben von Kritischen Abschnitt Characterized that sie zu keinem zeitpunkt Inkonsistenzen erzeugen. Datenstrukturen wurden durch die Operation modifiziert . Bin Die Änderung klein, Wie in der Referenzzählung oder bei der Manipulation von Zeigern, can Prozessor -Befehle Wie Compare-and-Swap oder Load-Link / Store-Conditional used Werden. Sind die Modifizierungen umfangreicher, werden zuerst auf Kopien der ursprünglichen Objekte durchgeführt. Wird das Objekt während der Erstellung wo Modifikation von other Prozess Verändert, schlagen sterben Betrieb zunächst Fehl und Durcheinander Wiederholt Werden.

Nachteile dieser Technik

  • Komplexität: Die Nützlichkeit von atomaren Änderungen führt zu komplexen und schwer verständlichen Algorithmen. The Implementation Effizienter und universeller nicht-blockierender Datenstrukturen ist ein aktuelles Forschungsgebiet.
  • Verhungern: durch die möglichkeit des Fehlschlag Kann es zu Einer Situation kommen, in der Eine Komplex Änderung immer wieder von kürzerer Änderung ungültig gemacht Wird und Characterized „verhungert“ (engl. Starvation ). Das ist verhungern Kehrseite , wo sterben Verklemmung in der blockierenden Synchronisation.

Im Gegensatz dazu ist der Algorithmus oft robust und effizient. Diese Komplexe und schwer wartbaren Algorithmen sind auch besser geeignet. Es sind nur wenige Arten von Daten implementiert.

Warte- und Sperrfreie Semantik

In der Literatur gab es keinen Garantengrad zur Entsperrung der Algorithmen des nicht blockierenden Laufzeitenverhaltens.

  1. Warten Sie frei : Alle Der Betrieb sehr beteiligte Prozess Wird durchgeführt, unabhängig von parallel laufenden Prozess im Syste.
  2. Lock-free : Keine Operation wird ausgelöst, durch mögliche Überschneidungen mit andren Prozessen können aber Verzögerungen auftreten.

Es Aufwand für warten frei Implementierungen sind allerdings sehr hoch. Implementierung hoch komplex, zum Anderen steigt , wo Speicher- und Zeitbedarf Sölch Algorithmus meist mit der Anzahl der beteiligten Zum EINEN ist sterben Prozess BZW. Themen . Es existieren Implementierungen für Einfache Warteschlange [1] und Stacks , das Thema ist aber noch ein Aktuelles Forschungsgebiet . Alle wartefreien Algorithmen kümmern sich auch um Lock-Free.

Diese Lock-freien Algorithmen sind in der Praxis aber schon als Alternative zu Locks etabliert .

Siehe auch

  • Prozesssynchronisation
  • Paralleler Algorithmus
  • Nichtsequentielle Programmierung
  • Multithreading

Einzelstunden

  1. Hochspringen↑ Alex Kogan und Erez Petrank. 2011. Wartefreie Warteschlangen mit mehreren Enqueuern und Dequeuers. In Proceedings des 16. ACM-Symposiums über Prinzipien und Praktiken der parallelen Programmierung (PPoPP ’11). ACM, New York, NY, USA, S. 223-234. doi : 10.1145 / 1941553.1941585