Essentiellement, la goroutine est une coroutine. La différence est que Golang encapsule et traite la planification des goroutines dans de nombreux aspects tels que le temps d'exécution et les appels système lors d'une exécution à long terme ou d'appels système. (Apprentissage recommandé : go)
transférera activement le CPU (P) de la goroutine actuelle afin que d'autres goroutines puissent être planifiées et exécutées. Autrement dit, Golang prend en charge les coroutines à partir du niveau linguistique. .
L'une des fonctionnalités de Golang est qu'il prend en charge nativement les coroutines dès le niveau du langage. Vous pouvez créer une coroutine en ajoutant le mot-clé go devant une fonction ou une méthode.
Comparaison sous d'autres aspects
Consommation de mémoire
Chaque goroutine (coroutine) occupe la mémoire par défaut Il y a beaucoup moins de threads que Java et C.
goroutine : 2 Ko
Thread : 8 Mo
Surcharge de planification de commutation de thread et de goroutine
Surcharge de commutation de thread/goroutine, Goroutine est beaucoup plus petit que les threads
Threads : impliquent un changement de mode (passage du mode utilisateur au mode noyau), 16 registres, PC, SP... et autres rafraîchissements de registres, etc.
goroutine : Uniquement la modification de la valeur de trois registres - PC/SP/DX.
Nous savons que la coroutine est une implémentation de thread légère dans le langage Go gérée par le runtime Go. .
Ajoutez le mot-clé go avant un appel de fonction, et l'appel sera exécuté simultanément dans une nouvelle goroutine. Lorsque la fonction appelée revient, cette goroutine se termine également automatiquement. Il convient de noter que si cette fonction a une valeur de retour, la valeur de retour sera ignorée.
Jetez d'abord un œil au code du programme suivant :
func Add(x, y int) { z := x + y fmt.Println(z) } func main() { for i:=0; i<10; i++ { go Add(i, i) } }
Lorsque vous exécutez le code ci-dessus, vous constaterez que rien n'est imprimé à l'écran et le programme se termine .
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!