Ich habe versucht, die Serialisierbarkeit und Linearisierbarkeit im Kontext des Software-Transaktionsspeichers zu erfassen. Ich denke jedoch, dass beide Begriffe allgemein auf das Transaktionsgedächtnis angewendet werden können.
An dieser Stelle verstehe ich beide Themen wie folgt.
Serialisierbarkeit
Serialisierbarkeit ist eine globale Eigenschaft. Es ist eine Korrektheitseigenschaft von Transaktionen. Bei bestimmten
k
Prozessen, bei denen jeweils eine TransaktionTk
gleichzeitig ausgeführt wird, stellt die Serialisierbarkeit sicher, dass eine Folge von Transaktionen nacheinander (dh nacheinander) ausgeführt werden kann , sodass das Endergebnis mit den gleichzeitig ausgeführten Transaktionen übereinstimmt. Es gibt also eine Permutation der Liste(T1, T2,..,Tk)
, die eine Liste von Transaktionen definiert, die nacheinander ausgeführt werden können.
Diese Eigenschaft macht für mich vollkommen Sinn und ich denke, meine Definition ist korrekt. Ich habe diese Definition auf den Text in "Die Kunst der Multiprozessor-Programmierung" von Herlihy und Shavit gestützt.
Linearisierbarkeit
Die Linearisierbarkeit ist eine lokale Eigenschaft gleichzeitiger Objekte (z. B. eine Instanz einer Klasse, die von Threads gemeinsam genutzt wird). Die Linearisierbarkeit stellt sicher, dass, wenn zwei Prozesse jeweils einen Serien-Op-Methodenaufruf (z. B.
queue
oderdequeue
auf einerQueue
Instanz) für dieses gemeinsam genutzte Objekt ausführen, eine sequentielle Reihenfolge dieser Methodenaufrufe vorliegt, bei der die Programmreihenfolge (die Reihenfolge, in der der Programmierer sie geschrieben hat) nicht unbedingt beibehalten wird down), aber jeder Methodenaufruf scheint sofort zu erfolgen (dh Aufruf und Antwort folgen direkt aufeinander), während das Ergebnis jedes Methodenaufrufs einzeln und folglich das Objekt seinen Status beibehält.
Frage
Nach einem "On the correctness of TM"
Artikel von Guerraoui und Kapalka ist dies die Definition der Linearisierbarkeit im Kontext von TM:
.. Eine Sicherheitseigenschaft zur Beschreibung gemeinsam genutzter Objekte wird manchmal als korrektes Kriterium für TM verwendet. In der TM-Terminologie bedeutet Linearisierbarkeit, dass jede Transaktion intuitiv so aussehen sollte, als ob sie zu einem bestimmten Zeitpunkt während ihrer Lebensdauer stattgefunden hätte.
Diese Definition scheint mir nur der Serialisierbarkeit zu ähneln. Das Papier definiert die Serialisierbarkeit jedoch wie folgt:
.. ist eine der am häufigsten benötigten Eigenschaften einer Datenbanktransaktion. Grob gesagt ist ein Verlauf H von Transaktionen (dh die Reihenfolge aller Operationen, die von allen Transaktionen in einer bestimmten Ausführung ausgeführt werden) serialisierbar, wenn alle festgeschriebenen Transaktionen in H dieselben Operationen ausgeben und dieselben Antworten erhalten wie in einem sequentiellen Verlauf S, der besteht nur der festgeschriebenen Transaktionen in H. (Eine sequentielle Historie ist eine ohne Parallelität zwischen den Transaktionen).
Diese Definition scheint jedoch zu implizieren, dass man Anweisungen aus Transaktionen so umordnen kann, dass sie verschachtelt sind. (Dh ordnen Sie die Anweisungen so um, dass nicht alle Anweisungen einer Transaktion T
nacheinander in angezeigt werden H
).
Ich gehe davon aus, dass meine persönlichen obigen Definitionen korrekt sind. Meine eigentliche Frage ist, wie Linearisierbarkeit im Kontext des Transaktionsgedächtnisses definiert wird. Es macht keinen Sinn, über jeden Methodenaufruf (dh Lese- / Schreibvorgang) in einer Transaktion einzeln nachzudenken, da dies die Semantik des Transaktionsspeichers brechen würde. Es wäre auch nicht sinnvoll, über zwei gleichzeitige Transaktionen ihre Verschachtelungen begründen zu müssen, da dies offensichtlich die Serialisierbarkeit beeinträchtigen würde. Bedeutet Linearisierbarkeit, dass einzelne Operationen innerhalb einer Transaktion neu angeordnet werden können? Wenn die Linearisierbarkeit eine stärkere Form der Serialisierbarkeit ist, sollte es keine Rolle spielen, in welcher Reihenfolge die Operationen innerhalb einer einzelnen Transaktion ausgeführt werden.
Kurz gesagt: Ist mein Verständnis von Serialisierbarkeit und Linearisierbarkeit zuallererst korrekt? Ich bin verwirrt, nachdem ich eine Vielzahl von Definitionen in verschiedenen Werken gelesen habe. Und zweitens, was bedeutet es, dass eine Reihe von Transaktionen linearisierbar ist?
Ich habe auch die Frage gelesen, die in den Kommentaren verlinkt war. Aber es hat mir meine spezifische Frage nicht erklärt.
Quellen
- SO Frage zum Thema (nicht explizit zu STM) /programming/4179587/difference-between-linearizability-and-serializability
Eine informelle Erklärung zu den beiden http://www.bailis.org/blog/linearizability-versus-serializability/
Originalpapier zur Serialisierbarkeit http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.92.2690&rep=rep1&type=pdf
[1] Originalarbeit zur Linearisierbarkeit http://www.cs.toronto.edu/~christoff/files/Linearizability-ACorrectnessConditionForConcurrentObjects.pdf