Maison > développement back-end > Golang > Pourquoi `defer Cancel()` est-il crucial dans le package contextuel de Go ?

Pourquoi `defer Cancel()` est-il crucial dans le package contextuel de Go ?

Patricia Arquette
Libérer: 2024-12-04 07:13:14
original
452 Les gens l'ont consulté

Why Is `defer cancel()` Crucial in Go's Context Package?

Annulation contextuelle : implications de la négligence des reports

Dans Go, le package contextuel fournit des mécanismes de gestion des délais de demande et de l'annulation. Des fuites de contexte peuvent se produire si les rappels d'annulation ne sont pas invoqués, entraînant des opérations de nettoyage gourmandes en ressources et des répercussions potentielles sur les performances.

Considérez l'extrait de code suivant :

func Call(ctx context.Context, payload Payload) (Response, error) {
    req, err := http.NewRequest(...)
    ctx, cancel = context.withTimeout(ctx, time.Duration(3) * time.Second)
    // defer cancel() missing!
    return http.DefaultClient.Do(req)
}
Copier après la connexion

L'importance de l'annulation explicite

L'outil go vet avertit correctement de l'appel defer Cancel() omis. Cet appel est crucial car :

Fuites de mémoire

Sans l'appel d'annulation, la goroutine créée par WithCancel ou WithTimeout reste indéfiniment en mémoire (jusqu'à l'arrêt du programme), entraînant une fuite de mémoire. Si ce comportement se répète plusieurs fois, l'utilisation de la mémoire va monter en flèche.

Gloutons d'étranglement des performances

Les contextes non annulés peuvent provoquer des goulots d'étranglement des performances. Lorsqu'une requête HTTP pour laquelle un contexte a été annulé reste incomplète, des ressources sont consommées pour la gérer ainsi que les tentatives potentielles de requête.

Bonnes pratiques

Pour éviter les fuites de contexte et garantir une gestion efficace des ressources, il est meilleure pratique pour utiliser defer Cancel() immédiatement après avoir appelé WithCancel() ou WithTimeout(). Cela garantit que les opérations de nettoyage sont déclenchées rapidement lorsque le contexte n'est plus nécessaire.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal