"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment le mot-clé Defer de Go peut-il être utilisé pour profiler avec précision le temps d'exécution d'une fonction ?

Comment le mot-clé Defer de Go peut-il être utilisé pour profiler avec précision le temps d'exécution d'une fonction ?

Publié le 2024-11-11
Parcourir:528

How Can Go's Defer Keyword Be Used to Accurately Profile Function Runtime?

Profiling Function Runtime in Go : une approche différée de précision

Dans le domaine de l'optimisation logicielle, mesurer le temps d'exécution des fonctions peut fournir des informations précieuses pour améliorer l'efficacité. Go, un langage de programmation robuste, offre un mécanisme pratique pour chronométrer les fonctions et renvoyer leur durée d'exécution en millisecondes.

La fonction mesurée dans le temps

Pour lancer notre aventure, commençons créer une fonction que nous voulons profiler. Cet exemple dort simplement pendant une durée spécifiée :

func SleepFor(d time.Duration) {
    time.Sleep(d)
}

L'avantage Defer de Go

Le mot-clé defer de Go s'avère déterminant dans cette entreprise. En différant l'exécution d'une fonction jusqu'à la sortie de la fonction englobante, nous pouvons mesurer le temps écoulé entre l'appel de la fonction et son exécution réelle.

Code de mesure du temps

Voyons introduisez deux fonctions d'assistance, bien nommées trace et un. Trace enregistre le point d'entrée de la fonction et capture l'heure de début, tandis que non enregistre le point de sortie et calcule le temps écoulé en secondes.

func trace(s string) (string, time.Time) {
    log.Println("START:", s)
    return s, time.Now()
}

func un(s string, startTime time.Time) {
    endTime := time.Now()
    log.Println("  END:", s, "ElapsedTime in seconds:", endTime.Sub(startTime))
}

Implémentation du timing

Maintenant, intégrons ces fonctions d'assistance dans notre fonction SleepFor :

func profileSleep(d time.Duration) {
    defer un(trace("SleepFor"))

    SleepFor(d)
}

Résultats impeccables

Avec cette implémentation élégante, nous obtenons des journaux concis du temps écoulé pour chaque appel de fonction :

START: profileSleep
  END: profileSleep ElapsedTime in seconds: 0.50044

Considérations relatives à la précision

Bien que les journaux fournissent des temps écoulés précis, il convient de noter que les instructions de journalisation elles-mêmes introduisent une légère inexactitude. Si une plus grande précision est requise, envisagez un mécanisme de synchronisation alternatif.

Conclusion

Exploiter le report de Go facilite les fonctions de synchronisation et l'obtention de leur durée d'exécution en millisecondes. Cette technique puissante permet d'obtenir un aperçu des performances du code, ouvrant la voie à des optimisations pour améliorer l'efficacité de vos applications.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3