2013-09-01 8 views
6

Vom Leistung und Skalierbarkeit Kapitel des JCIP book:Was ist mit "Fast-Path" unübertroffene Synchronisation gemeint?

Die Synchronmechanik für den uncontended Fall optimiert (volatile ist immer uncontended), und in diesem Schreiben, die Performance Kosten eines „schnellen -Pfad "unübertroffene Synchronisation Bereiche von 20 bis 250 Taktzyklen für die meisten Systeme.

Was bedeutet der Autor von schnell Pfad hier uncontended Synchronisation?

+0

Haben Sie irgendwelche Google-Suchen gemacht. Das kam für mich auf: https://blogs.oracle.com/dagastine/entry/java_synchronization_optimizations_in_mustang – Gray

Antwort

7

Ich bin nicht vertraut mit dem Thema des Buches, aber in der Regel ist ein "schneller Pfad" eine bestimmte mögliche Kontrollfluss Zweig, die deutlich effizienter als die anderen und daher bevorzugt, aber nicht mit komplexen Fällen umgehen kann.

Ich nehme an, dass das Buch über Java synchronized Block/Qualifier spricht. In diesem Fall handelt es sich bei dem schnellen Pfad am wahrscheinlichsten um einen, bei dem es leicht zu erkennen ist, dass keine anderen Threads auf die gleichen Daten zugreifen. Das Buch sagt also, dass die Implementierung von synchronized optimiert wurde, um die beste Leistung in dem Fall zu haben, in dem nur ein Thread tatsächlich das Objekt verwendet, im Gegensatz zu dem Fall, wo mehrere Threads sind und die Synchronisation tatsächlich vermitteln muss darunter.

2

Der erste Schritt zum Erwerben einer synchronisierten Sperre ist ein einzelner flüchtiger Schreibvorgang (Überwachungsbesitzerfeld). Wenn die Sperre unangefochten ist, dann ist das alles was passieren wird.

Wenn die Sperre umstritten ist, gibt es verschiedene Kontextschalter und andere Mechanismen, die die Taktzyklen erhöhen.

+0

Ich verstehe nicht, wie dies die Frage beantwortet, was ein "Fast-Path" ist? Wenn hier etwas implizit ist, können Sie das bitte explizit machen? – Geek

+0

Der schnelle Pfad ist das Lesen und Schreiben eines einzelnen Feldes. Der langsame Pfad ist die Aufhebung eines Threads und das Speichern des Threadkontexts. –

14

Es gibt zwei verschiedene Konzepte hier.

  1. Schnell-Pfad und Slow-Pfadcode
  2. Uncontended und stritten Synchronisation

Langsam-Pfad vs Schnellpfadcode

Dies ist ein weiterer Weg, um die Hersteller von identifizieren der maschinenspezifische Binärcode.

Mit HotSpot VM, slow-Pfadcode ist Binärcode durch eine C++ Implementierung erzeugt, wo schnell Pfadcode Code durch JIT-Compiler erzeugt bedeutet.

Im Allgemeinen Sinn ist Fast-Path-Code viel mehr optimiert. JIT-Compiler wikipedia is a good place to start vollständig zu verstehen.

Uncontended und stritten Synchronisation

Java Synchronisierungskonstrukt (Monitors) haben das Konzept des Eigentums. Wenn ein Thread versucht, den Monitor zu sperren (zu übernehmen), kann er entweder gesperrt (gehört einem anderen Thread) oder entsperrt werden.

Uncontended Synchronisation geschieht in zwei verschiedenen Szenarien:

  1. entriegelte Monitor (Eigentum Straße gewonnen weg)
  2. -Monitor bereits vom selben Thread gehört

stritten Synchronisation, auf der anderen Seite, bedeutet, dass der Thread blockiert wird, bis der Eigentümer-Thread die Monitorsperre aufgibt.

Die Beantwortung der Frage

von schnell Pfad uncontended Synchronisation der Autor Mittel, die schnellste Bytecode Übersetzung (schnell-Pfad) im günstigsten Szenario (uncontended Synchronisation).

+0

Ausgezeichnete Antwort. Sehr schön erklärt – Pigol

+0

Dies sollte definitiv die akzeptierte Antwort sein! – ccpizza

Verwandte Themen