Maison > développement back-end > Golang > Comment puis-je arrêter une Go Goroutine avant sa fin après un délai d'attente ?

Comment puis-je arrêter une Go Goroutine avant sa fin après un délai d'attente ?

Susan Sarandon
Libérer: 2024-12-30 12:22:09
original
514 Les gens l'ont consulté

How Can I Stop a Go Goroutine Before Its Completion After a Timeout?

Arrêter l'exécution de Goroutine en cas d'expiration : une limitation du modèle Fork-Join

Dans le modèle de concurrence fork-join de Go, l'exécution de Goroutine ne peut pas être interrompue une seule fois initié. Bien qu'un délai d'attente puisse être défini pour la lecture d'un canal, il n'arrête pas l'exécution des goroutines écrivant sur le canal.

L'exemple expliqué

Dans le code fourni :

  • La fonction Find crée un canal tamponné et lance une goroutine pour envoyer une réponse après 10 secondes.
  • L'instruction select a deux cas : réception du canal ou expiration après 50 millisecondes.
  • La goroutine envoie finalement la réponse même après le délai d'attente, ce qui fait que la sortie souhaitée n'est pas atteint.

Comprendre la limitation

L'incapacité d'interrompre Les goroutines proviennent du modèle fork-join de Go :

  • Les goroutines sont dérivées du thread principal et s'exécutent simultanément sans contrôle direct.
  • Les points de jonction, tels que les communications de canal, sont les seules instances où la synchronisation se produit.
  • Les délais d'attente définis sur les récepteurs de canal n'ont aucun effet sur l'exécution de l'expéditeur goroutines.

Approches alternatives

L'interruption directe n'étant pas possible, des approches alternatives peuvent être utilisées :

  • Annulation de contexte : associez un contexte à la goroutine et annulez-le en cas d'expiration du délai, ce qui amène la goroutine à recevoir des signaux pour terminer.
  • Processus séparé : démarrez la goroutine dans un processus séparé et terminez-le si 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