Maison > développement back-end > Golang > Pourquoi une goroutine à boucle infinie bloque-t-elle un serveur HTTP Go ?

Pourquoi une goroutine à boucle infinie bloque-t-elle un serveur HTTP Go ?

Barbara Streisand
Libérer: 2024-12-24 21:07:14
original
378 Les gens l'ont consulté

Why Does an Infinite Loop Goroutine Block a Go HTTP Server?

Problème : les goroutines à boucle infinie bloquent le serveur HTTP

Dans Go, les goroutines à boucle infinie sont censées bloquer d'autres goroutines lorsqu'elles utilisent moins de threads que les cœurs disponibles, même si runtime.GOMAXPROCS est défini en conséquence. Cependant, ce comportement diffère lors de l'utilisation du package net/http.

Q : Pourquoi une goroutine en boucle infinie bloque-t-elle le serveur HTTP après quelques invocations ?

R : Le planificateur du runtime Go n'est pas entièrement préemptif. Dans votre exemple, la boucle infinie ne contient aucun appel de fonction, empêchant le planificateur d'intervenir. Cela entraîne une gestion continue de la boucle par un thread, bloquant d'autres goroutines, y compris le serveur HTTP.

Q : Pourquoi runtime.LockOSThread() ne parvient-il pas à résoudre le problème ?

A: runtime.LockOSThread() est destiné à garantir que la boucle vide s'exécute dans un thread séparé. Cependant, la nature non préemptive du planificateur rend cette approche inefficace dans ce cas.

Résolution :

  • Introduire un corps de boucle non vide pour déclencher des appels de fonction et permettre au planificateur d'intervenir.
  • Appelez manuellement runtime.Gosched dans la boucle infinie pour générer explicitement le processeur.

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