Le temps. Le sommeil bloque-t-il les goroutines ?
Dans Go, une idée fausse courante est que le temps. Le sommeil bloque les goroutines, ce qui suscite des inquiétudes concernant un excès de temps. création de fil de discussion.
Comprendre Go Planificateur
Go utilise un planificateur MPG (Multiple Producer, Single Consumer), dans lequel un nombre limité de threads appelés M partagent des tâches à partir d'une file d'attente desservie par Ps (worker goroutines). Lorsqu'un M est inactif, il prend une tâche dans la file d'attente et l'exécute.
Time.Sleep bloque-t-il vraiment les goroutines ?
Oui, time.Sleep bloque les goroutines dans le sens où cela empêche l'exécution ultérieure de la goroutine actuelle pendant la période de sommeil.
Pourquoi la création de threads limitée lorsque Vous utilisez time.Sleep ?
Malgré la nature bloquante de time.Sleep, le planificateur Go peut ne pas générer de nouveaux threads pour deux raisons :
Différence de création de threads entre les exemples
Votre premier exemple, où les goroutines dorment pendant une période prolongée, utilise un nombre de threads, car le planificateur peut déterminer qu'aucun traitement supplémentaire n'est nécessaire pendant la période de veille. En revanche, votre deuxième exemple, qui implique des opérations d'E/S simultanées, nécessite plus de threads puisque chaque goroutine exécute activement des tâches d'E/S.
Quand s'inquiéter de la création de threads
En général, Le planificateur de Go gère efficacement la création de threads. Cependant, dans de rares cas, par exemple lorsque vous créez intentionnellement un nombre excessif de goroutines qui passent la plupart de leur temps à bloquer les opérations d'E/S, vous pouvez rencontrer des problèmes de création excessive de threads.
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!