2013-09-01 17 views
6

Z wydajność i skalowalność rozdział JCIP book:Co oznacza "szybka" synchronizacja bez uprzedzeń?

Zsynchronizowany mechanizm jest zoptymalizowany dla uncontended przypadku (lotny jest zawsze uncontended), a przy tym piśmie, koszt wydajność o „szybki -path "niezakontraktowane zakresy synchronizacji od 20 do 250 cykli zegarowych dla większości systemów.

Co oznacza autor? szybka ścieżka synchronizacja bez synchronizacji tutaj?

+0

Czy zrobiłeś jakieś wyszukiwania w Google. To mi się podobało: https://blogs.oracle.com/dagastine/entry/java_synchronization_optimizations_in_mustang – Gray

Odpowiedz

7

Nie jestem zaznajomiony z tematem książki, ale ogólnie "szybka ścieżka" jest specyficzną możliwą gałęzią przepływu sterowania, która jest znacznie bardziej wydajna niż inne i dlatego jest preferowana, ale nie może obsługiwać złożonych przypadków.

Zakładam, że książka mówi o bloku/kwalifikatorze Java synchronized. W takim przypadku szybka ścieżka jest najprawdopodobniej taka, w której łatwo jest wykryć, że nie ma innych wątków uzyskujących dostęp do tych samych danych. W książce mówi się, że implementacja synchronized została zoptymalizowana, aby uzyskać najlepszą wydajność w przypadku, gdy tylko jeden wątek faktycznie korzysta z obiektu, w przeciwieństwie do przypadku, w którym znajduje się wiele wątków, a synchronizacja musi rzeczywiście pośredniczyć pomiędzy nimi.

2

Pierwszym krokiem do uzyskania synchronicznej blokady jest pojedynczy lotny zapis (pole właściciela monitora). Jeśli zamek jest niekwestionowany, to wszystko, co się wydarzy.

Jeśli zamek jest zakwestionowany, wówczas pojawią się różne przełączniki kontekstu i inne mechanizmy, które zwiększą cykle zegara.

+0

Nie rozumiem, jak to odpowiada na pytanie, co jest "szybką ścieżką"? Jeśli coś tu jest niejawne, czy możesz to wyrazić? – Geek

+0

Szybka ścieżka to odczyt i zapis pojedynczego pola. Powolna ścieżka to zawieszenie wątku i zapisanie kontekstu wątków. –

14

Istnieją tutaj dwa różne pojęcia.

  1. szybkiej ścieżki i kod
  2. Uncontended i utrzymywał synchronizacji

zwolnionym ścieżka vs kodu szybkiej ścieżki zwolnionym ścieżka

Jest inny sposób, w celu identyfikacji producenta specyficzny dla komputera kod binarny.

Z HotSpot VM kod wolno ścieżka jest kod binarny produkowane przez C++ wdrażania, gdzie kod szybkiej ścieżki oznacza kod produkowanego przez kompilator JIT.

W sensie ogólnym kod szybkiej ścieżki jest o wiele bardziej zoptymalizowany. Aby w pełni zrozumieć kompilatory JIT wikipedia is a good place to start.

Uncontended i utrzymywał synchronizacja

synchronizacja konstrukt Java (Monitors) mają pojęcia własności. Kiedy wątek próbuje zablokować (uzyskać prawo własności) monitora, może zostać zablokowany (posiadany przez inny wątek) lub odblokowany.

Uncontended synchronizacja przebiega w dwóch różnych scenariuszy:

  1. Unlocked Monitor (własność zyskał cieśnina away)
  2. monitor już w posiadaniu tego samego wątku

utrzymywał synchronizacji, z drugiej strony, oznacza, że ​​wątek zostanie zablokowany, dopóki wątek właściciela nie zwolni blokady monitora.

Odpowiadając na pytanie

Przez szybkiej ścieżki uncontended synchronizacji te środki autorem, najszybszy tłumaczenie kodu bajtowego (fast-path) w najtańszym scenariusza (uncontended synchronizacji).

+0

Doskonała odpowiedź. Bardzo ładnie wyjaśnione – Pigol

+0

To zdecydowanie powinna być akceptowana odpowiedź! – ccpizza