2013-09-01 8 views
6

Dal prestazioni e scalabilità capitolo della JCIP book:Cosa si intende per sincronizzazione incontrollata "fast-path"?

Il meccanismo sincronizzato è ottimizzato per il uncontended caso (volatile è sempre uncontended), ed a questa scrittura, il costo prestazioni di un "veloce -path "gamme di sincronizzazione incontrollate da 20 a 250 cicli di clock per la maggior parte dei sistemi.

Che cosa l'autore intende per rapido percorso uncontended sincronizzazione qui?

+0

Hai effettuato ricerche su google. Questo mi è venuto in mente: https://blogs.oracle.com/dagastine/entry/java_synchronization_optimizations_in_mustang – Gray

risposta

7

Non ho familiarità con l'argomento del libro, ma in generale un "percorso veloce" è uno specifico ramo del flusso di controllo che è significativamente più efficiente degli altri e quindi preferibile, ma non può gestire casi complessi.

Suppongo che il libro stia parlando del blocco/qualificatore Java synchronized. In questo caso, il percorso veloce è più probabile in cui è facile rilevare che non ci sono altri thread che accedono agli stessi dati. Quello che il libro sta dicendo, quindi, è che l'implementazione di synchronized è stata ottimizzata per avere le migliori prestazioni nel caso in cui solo un thread stia effettivamente utilizzando l'oggetto, a differenza del caso in cui ci sono più thread e la sincronizzazione deve effettivamente mediare tra loro.

2

Il primo passaggio dell'acquisizione di un blocco sincronizzato è una singola scrittura volatile (campo proprietario del monitor). Se il blocco è incontestato, allora è tutto ciò che accadrà.

Se il blocco è contestato, vari switch di contesto e altri meccanismi aumenteranno i cicli di clock.

+0

Non riesco a capire come questo risponda alla domanda su cosa sia un 'percorso veloce '? Se qualcosa è implicito qui, puoi renderlo esplicito? – Geek

+0

Il percorso veloce è la lettura e scrittura di un singolo campo. Il percorso lento è la sospensione di un thread e il salvataggio del contesto dei thread. –

14

Ci sono due concetti distinti qui.

  1. Fast-percorso e il codice
  2. Uncontended e la sincronizzazione Contesa

lento percorso vs codice Veloce-percorso lento-percorso

questo è un altro modo per identificare il produttore del il codice binario specifico della macchina.

Con HotSpot VM, codice lento-percorso è codice binario prodotta da un'implementazione C++, dove il codice veloce-percorso mezzi codice prodotto dal compilatore JIT.

In senso generale, il codice di percorso veloce è molto più ottimizzato. Per comprendere appieno i compilatori JIT wikipedia is a good place to start.

Uncontended e Contesa sincronizzazione

sincronizzazione costrutto di Java (Monitors) hanno il concetto di proprietà. Quando un thread tenta di bloccare (ottenere la proprietà di) il monitor, può essere bloccato (di proprietà di un altro thread) o sbloccato.

sincronizzazione Uncontended avviene in due diversi scenari:

  1. sbloccato monitor (proprietà acquisita stretto distanza)
  2. Monitor già di proprietà dello stesso filo

sincronizzazione sostenuto, d'altra parte, significa che il thread sarà bloccato fino a quando il thread proprietario non rilascerà il blocco del monitor.

Rispondendo alla domanda

By rapido percorso di sincronizzazione uncontended i mezzi autore, la traduzione bytecode più veloce (fast-path) nello scenario più economico (sincronizzazione uncontended).

+0

Ottima risposta. Molto ben spiegato – Pigol

+0

Questa dovrebbe essere la risposta accettata! – ccpizza

Problemi correlati