Que signifie «hot path» dans le contexte de sync.Once?


14

go version: 1.13.4 Dans le code source sync / once.go , les commentaires suivants mentionnaient "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
}

Mes questions sont:

  1. Que signifie "chemin chaud" ici?

  2. Est-ce que "C'est le premier dans la structure" rend un accès "hot path" plus efficace? Pourquoi?


Pourquoi placer le champ en premier est préférable est expliqué dans la dernière phrase. Quelque chose de flou à ce sujet?
Peter

Réponses:


10

Un chemin chaud est une séquence d'instructions exécutées très fréquemment.

Lorsque vous accédez au premier champ d'une structure, nous pouvons directement déréférencer le pointeur sur la structure pour accéder au premier champ. Pour accéder à d'autres champs, nous devons fournir un décalage par rapport à la première valeur en plus du pointeur struct.

En code machine, ce décalage est une valeur supplémentaire à transmettre avec l'instruction qui le rallonge. L'impact sur les performances est que le processeur doit effectuer un ajout du décalage au pointeur struct pour obtenir l'adresse de la valeur à laquelle accéder.

Ainsi, le code machine pour accéder au premier champ d'une structure est plus compact et plus rapide.

Notez que cela suppose que la disposition des valeurs de champ en mémoire est la même que dans la définition de la structure.


Pouvez-vous développer la dernière phrase? c.-à-d. quand n'est-ce pas le cas?
colminator

@colminator un compilateur pourrait décider de changer l'ordre des champs d'une structure en mémoire pour optimiser l'espace de stockage par exemple. Le compilateur go ne fait pas cela pour autant que je sache.
chmike

1
@chmike thx pour votre excellente réponse. J'aimerais savoir si cela signifie que je devrais mettre le champ fréquemment consulté en premier lieu d'une structure dans mon travail de programmation quotidien?
Yalou Wang

1
@YalouWang Ce serait une petite optimisation. Cela ne vaut l'effort que si les performances sont importantes.
chmike
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.