Signalisation des goroutines pour qu'ils se terminent
Dans Go, la gestion de la terminaison des goroutines peut être cruciale pour garantir un arrêt progressif des applications ou gérer l'allocation des ressources. Cet article explore une technique pour signaler à un goroutine en cours d'exécution d'arrêter son exécution.
L'exemple fourni dans l'enquête démontre un goroutine qui effectue des boucles infinies, simulant un traitement continu. L'objectif est de mettre fin à cette goroutine si elle dépasse un délai d'attente spécifié.
Une première approche consiste à utiliser deux canaux : l'un pour la communication et l'autre pour la terminaison de la signalisation. Cependant, la lecture à partir du canal de signalisation bloquerait la goroutine, ce qui irait à l'encontre de son objectif.
Utiliser un canal d'arrêt supplémentaire
Une solution efficace consiste à introduire un canal d'arrêt supplémentaire. , tropLate, de type chan struct{}. À l'intérieur de la goroutine, une instruction select est utilisée pour surveiller à la fois le canal de communication et le canal d'arrêt. Si le canal TooLate reçoit une valeur, la goroutine revient gracieusement, mettant fin à sa boucle de traitement.
Voici l'extrait de code modifié :
func main() {
// tooLate channel to signal goroutine to stop
tooLate := make(chan struct{})
proCh := make(chan string)
go func() {
for {
fmt.Println("working")
time.Sleep(1 * time.Second)
select {
case Dans cette solution, le canal proCh continue d'être utilisé pour la communication, tandis que le canal tropLate sert de signal de terminaison. Lorsque le canal TooLate est fermé, la goroutine le détecte et quitte sa boucle.
Autres considérations
En plus d'utiliser un canal supplémentaire, il existe des approches alternatives pour signaler les goroutines, comme l'utilisation du type sync.Cond intégré pour un contrôle plus précis de la synchronisation des goroutines. Le choix de la technique dépend des exigences spécifiques de votre application.
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