Skip to content

sysmon

sysmon est une fonction ordinaire, traduite littéralement comme surveillance système. Sans les commentaires, elle ne fait qu'environ 200 lignes de code. Elle se voit attribuer un thread séparé lors de la phase de démarrage du programme, puis surveille en permanence en arrière-plan l'état du runtime du programme Go et prend les mesures appropriées. Le code concernant son démarrage peut être consulté dans la fonction runtime.main :

go
func main() {
    ...
  mp := getg().m
  mainStarted = true
  systemstack(func() {
        newm(sysmon, nil, -1)
    })
    ...
}

La surveillance système elle-même n'est qu'une boucle for. L'intervalle de chaque itération est de 20 microsecondes, et à mesure que l'indice d'inactivité du programme augmente, l'intervalle peut atteindre jusqu'à 10 millisecondes. À chaque itération, elle effectue principalement les tâches suivantes :

  • Assister l'ordonnancement des coroutines, préempter les coroutines qui s'exécutent longtemps
  • Vérifier l'état de la mémoire et déterminer si un ramasse-miettes est nécessaire

Golang by www.golangdev.cn edit