Maison > développement back-end > Golang > Pourquoi le code fourni évite-t-il l'erreur « Deadlock » malgré l'importation du package net/http ?

Pourquoi le code fourni évite-t-il l'erreur « Deadlock » malgré l'importation du package net/http ?

Patricia Arquette
Libérer: 2024-10-24 10:33:02
original
604 Les gens l'ont consulté

Why Does the Provided Code Avoid the

Pourquoi ce code ne génère-t-il pas d'erreur « Deadlock » ?

Le code fourni inclut une instruction d'importation pour le package net/http mais n'invoque pas ses fonctions. Malgré cela, le message d'erreur « deadlock » n'est pas produit.

Explication

L'importation du package net initialise les Goroutines d'interrogation en arrière-plan qui désactivent efficacement le détecteur de blocage. Le détecteur de blocage s'appuie sur la capacité du moteur d'exécution à détecter lorsque les canaux ne reçoivent aucune donnée. Cependant, les Goroutines d'interrogation en arrière-plan génèrent une activité de canal intermittente, ce qui trompe le détecteur de blocage et l'empêche de signaler les blocages.

Exemple

Considérez le code suivant :

package main

import (
    "fmt"
    "net/http"
)

func main() {
    var ch = make(chan int)
    ch <- 1
}
Copier après la connexion

Si l'import net/http est supprimé, le code générera l'erreur "deadlock" attendue car le canal ne reçoit jamais de données d'un autre Goroutine. Cependant, avec l'importation net/http présente, les Goroutines d'interrogation en arrière-plan fournissent l'activité de canal nécessaire pour empêcher que l'erreur de blocage ne soit signalée.

Lectures complémentaires

Ce comportement est abordé plus en détail dans le numéro GitHub suivant : https://github.com/golang/go/issues/12734

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!

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