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. Lorsqu'il rencontre une exécution à long terme ou des appels système, il utilisera activement le processeur de la goroutine actuelle pour. (P) Transférez-le afin que d'autres goroutines puissent être planifiées et exécutées. Autrement dit, Golang prend en charge les coroutines au niveau du langage.
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. (Apprentissage recommandé : go)
Coroutine est une implémentation de thread légère dans le langage Go et est gérée par le runtime Go.
Version GO : go version go1.4.2 linux/amd64
Environnement de test :
[root@localhost mpro]# more /proc/cpuinfo | grep "model name" model name : Intel(R) Core(TM) i5-4590 CPU @ 3.30GHz model name : Intel(R) Core(TM) i5-4590 CPU @ 3.30GHz model name : Intel(R) Core(TM) i5-4590 CPU @ 3.30GHz model name : Intel(R) Core(TM) i5-4590 CPU @ 3.30GHz [root@localhost mpro]# [root@localhost mpro]# grep MemTotal /proc/meminfo MemTotal: 3868776 kB [root@localhost mpro]# getconf LONG_BIT 64 [root@localhost mpro]# more /etc/redhat-release CentOS Linux release 7.1.1503 (Core)
Cas de test :
package main import ( "time" ) func main() { for i := 0; i < 200000; i++ { go func() { time.Sleep(5 * time.Second) }() } time.Sleep(10 * time.Second) }
Avant d'exécuter le programme :
top - 18:53:19 up 19 min, 3 users, load average: 0.00, 0.04, 0.11 Tasks: 522 total, 1 running, 521 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.1 us, 0.2 sy, 0.0 ni, 99.6 id, 0.0 wa, 0.0 hi, 0.1 si, 0.0 st KiB Mem : 3868776 total, 3327732 free, 235764 used, 305280 buff/cache KiB Swap: 2097148 total, 2097148 free, 0 used. 3397344 avail Mem
Après l'exécution du programme :
top - 18:53:37 up 19 min, 3 users, load average: 0.00, 0.04, 0.11 Tasks: 524 total, 1 running, 523 sleeping, 0 stopped, 0 zombie %Cpu(s): 1.2 us, 10.6 sy, 0.0 ni, 88.2 id, 0.0 wa, 0.0 hi, 0.1 si, 0.0 st KiB Mem : 3868776 total, 2793732 free, 752512 used, 322532 buff/cache KiB Swap: 2097148 total, 2097148 free, 0 used. 2880016 avail Mem
Résumé : 200 000 coroutines occupent 500 Mo de mémoire et 500 000 Ko
En moyenne, une coroutine occupe 2,5 Ko
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!