Maison  >  Article  >  développement back-end  >  Quelle quantité de mémoire la coroutine Golang occupe-t-elle ?

Quelle quantité de mémoire la coroutine Golang occupe-t-elle ?

(*-*)浩
(*-*)浩original
2019-12-31 11:09:325074parcourir

Quelle quantité de mémoire la coroutine Golang occupe-t-elle ?

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!

Déclaration:
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