Maison > développement back-end > Golang > le corps du texte

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

(*-*)浩
Libérer: 2019-12-31 11:09:32
original
5093 Les gens l'ont consulté

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)
Copier après la connexion

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)
}
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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!

Étiquettes associées:
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal