Maison > Article > développement back-end > Comment TCP Accept s'intègre-t-il dans le modèle de concurrence de Go, malgré son blocage ?
Problème :
Contrairement au paradigme de concurrence Go, le TCPListener. La fonction Accept() dans Go est un appel système bloquant qui contredit apparemment l'accent mis par le langage sur les canaux de concurrence. Il ne semble pas y avoir de prise en charge inhérente pour select() avec Accept() ou d'options pour contrôler le comportement de blocage.
Réponse :
La préoccupation concernant une goroutine distincte pour chacun la socket d’écoute est valide. Les routines Go sont des threads légers gérés par le runtime, ce qui rend les opérations de blocage adaptées. Le moteur d'exécution sélectionne efficacement parmi ces routines, fournissant le comportement souhaité sans mécanismes visibles.
Pour implémenter une opération de type sélection avec délais d'attente, envisagez l'approche suivante :
Surveille le canal newConns dans une instruction select :
En utilisant des canaux et des goroutines, cette approche permet le multiplexage de l'activité des auditeurs et la gestion des délais d'attente tout en adhérant au modèle de concurrence de Go.
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!