Che cosa significa "hot path" nel contesto di sync.Once?


14

go version: 1.13.4 Nel codice sorgente sync / once.go , i seguenti commenti menzionano "hot path":

type Once struct {
    // done indicates whether the action has been performed.
    // It is first in the struct because it is used in the hot path.
    // The hot path is inlined at every call site.
    // Placing done first allows more compact instructions on some architectures (amd64/x86),
    // and fewer instructions (to calculate offset) on other architectures.
    done uint32
    m    Mutex
}

Le mie domande sono:

  1. Che cosa significa "hot path" qui?

  2. "È il primo nella struttura" a rendere più efficiente un accesso "hot path"? Perché?


Il motivo per cui è preferibile posizionare il campo per primo è spiegato nell'ultima frase. Qualcosa di poco chiaro a riguardo?
Peter,

Risposte:


10

Un percorso attivo è una sequenza di istruzioni eseguite molto frequentemente.

Quando si accede al primo campo di una struttura, è possibile dedicare direttamente il puntatore alla struttura per accedere al primo campo. Per accedere ad altri campi, è necessario fornire un offset dal primo valore oltre al puntatore struct.

Nel codice macchina, questo offset è un valore aggiuntivo da passare con l'istruzione che lo rende più lungo. L'impatto sulle prestazioni è che la CPU deve eseguire un'aggiunta dell'offset al puntatore struct per ottenere l'indirizzo del valore a cui accedere.

Pertanto, il codice macchina per accedere al primo campo di una struttura è più compatto e più veloce.

Si noti che ciò presuppone che il layout dei valori dei campi in memoria sia lo stesso della definizione della struttura.


Puoi espandere l'ultima frase? cioè quando non è così?
colminatore

@colminatore un compilatore potrebbe decidere di modificare l'ordine dei campi di una struttura in memoria per ottimizzare, ad esempio, lo spazio di archiviazione. Il compilatore go non lo fa per quanto ne so.
Chmike,

1
@chmike thx per la tua risposta eccellente. Mi piacerebbe sapere cosa significa che dovrei mettere il campo di accesso frequente al primo posto di una struttura nel mio lavoro di programmazione quotidiana?
Yalou Wang,

1
@YalouWang Sarebbe una piccola ottimizzazione. Vale la pena solo se le prestazioni sono importanti.
Chmike,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.