Maison  >  Article  >  développement back-end  >  Golang a-t-il un processus ?

Golang a-t-il un processus ?

青灯夜游
青灯夜游original
2022-12-26 17:38:274896parcourir

golang a des processus. Un processus est un processus d'exécution d'un programme dans le système d'exploitation et constitue l'unité de base pour l'allocation et la planification des ressources par le système ; un processus est un concept dynamique et constitue l'unité de base pour l'allocation et la gestion des ressources pendant l'exécution d'un programme. programme. Chaque processus possède son propre espace d’adressage. Le langage go prend en charge plusieurs processus et son modèle de thread est le modèle MPG. En général, il existe une correspondance plusieurs-à-plusieurs entre les processus Go et les threads du noyau.

Golang a-t-il un processus ?

L'environnement d'exploitation de ce tutoriel : système Windows 7, GO version 1.18, ordinateur Dell G3.

1. À propos des processus et des threads

1. Processus

Un processus est un processus d'exécution d'un programme dans le système d'exploitation. C'est l'unité de base pour l'allocation et la planification des ressources par le système. un concept dynamique est l'unité de base pour l'allocation et la gestion des ressources pendant l'exécution du programme. Chaque processus possède son propre espace d'adressage. Un processus a au moins 5 états de base : état initial, état d’exécution, état d’attente, état prêt et état de fin.

En termes simples : Un processus est un programme en cours d’exécution.

2. Thread

Un thread est une instance d'exécution d'un processus et la plus petite unité d'exécution d'un programme. C'est une unité de base qui est plus petite qu'un processus et peut s'exécuter indépendamment.

En termes simples : Un processus peut créer plusieurs threads, et plusieurs threads dans le même processus peuvent s'exécuter simultanément Pour qu'un programme s'exécute, il doit y avoir au moins un processus.

Golang a-t-il un processus ?

Golang a-t-il un processus ?

2. À propos de la concurrence et du parallélisme

1 Concurrence

Plusieurs threads se disputent une position en même temps, et seuls ceux qui sont en compétition ne peuvent être exécutés qu'un seul thread. s'exécute à chaque période de temps.

Golang a-t-il un processus ?

2. Parallèle

Plusieurs threads peuvent être exécutés en même temps. Dans chaque période, plusieurs threads peuvent être exécutés en même temps.

Golang a-t-il un processus ?

3. En termes simples

Les programmes multithread sont appelés concurrence lorsqu'ils sont exécutés sur un processeur monocœur et parallèles lorsqu'ils sont exécutés sur un processeur multicœur. Si le nombre de threads est supérieur au nombre de cœurs de processeur, un programme multithread sera à la fois simultané et parallèle sur plusieurs processeurs.

3. Coroutine Goroutine et thread principal

1. Le thread principal

peut être compris comme un thread ou un processus. Plusieurs coroutines peuvent être activées sur le thread principal d'un programme Golang. Plusieurs coroutines dans Golang peuvent réaliser la concurrence ou le parallélisme.

2. Les coroutines

peuvent être comprises comme des threads au niveau de l'utilisateur, qui sont transparents pour le noyau, c'est-à-dire que le système ne connaît pas l'existence des coroutines et est entièrement planifié par le propre programme de l'utilisateur. Une caractéristique majeure de Golang est qu'il prend en charge les coroutines de manière native du point de vue du langage. Vous pouvez créer une coroutine en ajoutant le mot-clé go devant une fonction ou une méthode. On peut dire que la coroutine dans golang est goroutine.

Golang a-t-il un processus ?

Le multi-coroutine en Golang est quelque peu similaire au multi-threading dans d'autres langages.

3. Multi-coroutine et multi-thread

Chaque goroutine (coroutine) dans Golang occupe beaucoup moins de mémoire par défaut que les threads Java et C. Les threads du système d'exploitation (threads du système d'exploitation) ont généralement une mémoire de pile fixe (généralement environ 2 Mo). Une goroutine (coroutine) occupe une très petite mémoire, seulement environ 2 Ko. La surcharge de planification de la commutation goroutine multi-goroutine est bien inférieure à celle des threads. C'est l'une des raisons pour lesquelles de plus en plus de grandes entreprises utilisent Golang.

4. Fonctionnement pratique des mots-clés go

1. Exécution séquentielle

package main

import "fmt"

func test() {
	for i := 0; i <h3 id="2.%20%E5%8A%A0%E5%85%A5go"><strong>2 Lorsque le thread principal s'exécute rapidement. </strong></h3> <pre class="brush:php;toolbar:false">package main

import "fmt"

func test() {
	for i := 0; i <h3 id="3.%20%E5%8A%A0%E5%85%A5%E6%97%B6%E9%97%B4"><strong>5. sync.WaitGroup résout le problème de ne pas attendre</strong></h3><pre class="brush:php;toolbar:false">package main

import (
    "fmt"
    "time"
)

// 加入时间
func test1() {
	for i := 0; i <h3 id="4.%20%E4%B8%BB%E7%BA%BF%E7%A8%8B%E6%89%A7%E8%A1%8C%E5%BF%AB%E7%9A%84%E6%83%85%E5%86%B5"><strong>6 Exécution simultanée de plusieurs coroutines en parallèle</strong></h3><pre class="brush:php;toolbar:false">package main

import (
    "fmt"
    "time"
)

func test1() {
	for i := 0; i <h3 id="5.%20sync.WaitGroup%E8%A7%A3%E5%86%B3%E4%B8%8D%E7%AD%89%E5%BE%85"><strong>5. )</strong></h3><pre class="brush:php;toolbar:false">package main

import (
    "fmt"
    "time"
    "sync"
)

var wg sync.WiatGroup

func test2() {
	for i := 0; i <h3 id="6.%20%E5%A4%9A%E5%8D%8F%E7%A8%8B%E5%B9%B6%E5%8F%91%E5%B9%B6%E8%A1%8C%E6%89%A7%E8%A1%8C">Plus Pour plus de connaissances sur la programmation, veuillez visiter : <strong>Vidéos de programmation</strong> ! ! </h3>

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