Maison > développement back-end > Golang > « time.Sleep » bloque-t-il vraiment les Goroutines ?

« time.Sleep » bloque-t-il vraiment les Goroutines ?

Mary-Kate Olsen
Libérer: 2024-11-24 05:17:13
original
1058 Les gens l'ont consulté

Does `time.Sleep` Really Block Goroutines?

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 :

  1. Optimisation : Le planificateur peut détecter que la goroutine n'effectue aucun travail pendant la période de sommeil et n'a pas besoin d'un actif M.
  2. Contraintes de ressources : Il peut ne pas être possible de créer des threads supplémentaires en raison des limitations imposées par le système d'exploitation ou l'environnement d'exécution.

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!

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