Maison  >  Article  >  développement back-end  >  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
Patricia Arquetteoriginal
2024-10-24 10:33:02438parcourir

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
}

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:
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