Frage

Ich habe in letzter Zeit viel über Transaktionsspeicher zu lesen auf. Es ist ein bisschen Hype um TM, so viele Leute sind begeistert, und es bietet Lösungen für schmerzhafte Probleme mit Arretierung, aber sie regelmäßig auch Beschwerden finden Sie unter:

  • Sie kann ich nicht tun / O
  • Sie haben Ihre Atom Abschnitte zu schreiben, so dass sie mehrmals ausgeführt werden können (Vorsicht mit Ihrer lokalen Variablen!)
  • Software Transactional Memory bietet eine schlechte Leistung
  • [Fügen Sie Ihr Haustier peeve hier]

Ich verstehe diese Bedenken: mehr als oft nicht, Sie Artikel über STMs finden, die nur auf einem bestimmten Hardware ausführen, die einige wirklich nette atomare Operation unterstützt (wie LL / SC ), oder hat es von einem imaginären Compiler unterstützt werden, oder es erfordert, dass alle Zugriffe auf Speichertransaktions sein, es führt Einschränkungen Monade-Stil geben, etc. Und vor allem:. das sind echte Probleme

Das hat mich führen mich zu fragen: Was spricht gegen die lokale Verwendung von Transaktionsspeicher als Ersatz für Schlösser Wäre dies schon genug Wert bringen, oder müssen Speicher überall eingesetzt werden transaktionale wenn? überhaupt verwendet?

War es hilfreich?

Lösung

Ja, Sie können jetzt echte sein, einige der Probleme, die Sie erwähnen, aber die Dinge entwickeln. Wie bei jeder neuen Technologie, zunächst gibt es einen Hype, dann wird die neue Technologie zeigt, dass es einige ungelöste Probleme, und dann werden einige dieser Probleme gelöst und andere nicht. Dieses Ergebnis in einer anderen Möglichkeit, Ihre Probleme zu lösen, für die diese Technologie des mehr angepasst ist.

Ich werde sagen, dass Sie STM für einen Teil Ihrer Anwendung verwenden können, haben mit den Zwängen der Ströme Stand der Technik verlassen können. Ein Teil der Anwendung, die nicht über ein verlorenes Effizienz zum Beispiel etwas dagegen.

Die Kommunikation zwischen der Transaktion und nicht transaktionalen Teilen ist das große Problem. Es gibt STM, die Sperre bewusst, so sie in einer konsistenten Art und Weise mit nicht transaktionalen Teile zusammenwirken können.

I / O ist auch möglich, aber Ihre Transaktion wird unwiderruflich, das heißt, kann nicht abgebrochen werden. Das bedeutet, dass nur eine Transaktion I / O zur gleichen Zeit verwenden kann. Sie können auch verwenden, I / O, wenn die Top-Level-Transaktion hat erfolgreich sein, auf einer nicht transaktionalen Welt, wie jetzt.

Die meisten der STM-Bibliothek Banksysteme zwingen, den Benutzer den Unterschied zwischen Transaktions- und nicht Transaktionsdaten zu machen. Also ja, müssen Sie verstehen, was das genau bedeutet. Auf der anderen Seite können Compiler ableiten, welche Zugriffstransaktions sein muss oder nicht, das Problem, dass sie zu konservativ sein können, um die Effizienz abnehmen wir bekommen können, wenn wir ausdrücklich auf die andere Art von Variablen zu verwalten. Dies ist das gleiche wie mit statischen, lokalen und dynamischen Variablen. Sie müssen die Einschränkungen kennen die jeweils ein richtiges Programm zu machen.

Andere Tipps

  

Ich habe in letzter Zeit viel über Transaktionsspeicher zu lesen auf.

Sie können auch in diesem Podcast auf Software Transactional Memory , die auch anhand von Garbage collection STM eine Analogie führt:

  

Das Papier ist etwa eine Analogie zwischen der Garbage Collection und Transaktionsspeicher.   Neben der Schönheit der Analogie zu sehen, dient der Diskussion auch als eine gute   Einführung in die Transaktionsspeicher (die in der Goetz / Holmes Episode erwähnt wurde)   und - bis zu einem gewissen Grad -. zu Garbage Collection

Wenn Sie Transaktionsspeicher als Ersatz für Schlösser verwenden, werden alle der Code, gehalten mit dieser Sperre ausführt kann nach Abschluss zurückgerollt werden. Damit der Code, der zuvor Schlösser verwenden, müssen Transaktions sein und haben alle die gleichen Nachteile (und Nutzen).

So, könnten Sie möglicherweise den Einfluss von TM beschränken auf diejenigen Teile des Codes, die Sperren halten, nicht wahr? Jedes Stück Code, der während einer gehaltenen Sperre genannt werden kann, muß TM unterstützen, in diesem Szenario. Wie viel von Ihrem Programm nicht gilt Schlösser und wird nie durch Code aufgerufen, die Sperren hält?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top