Maison  >  Article  >  Que signifie la concurrence au niveau du langage Go ?

Que signifie la concurrence au niveau du langage Go ?

DDD
DDDoriginal
2023-06-12 15:11:49855parcourir

La concurrence au niveau du langage Go signifie l'utilisation du langage Go pour effectuer plusieurs tâches au cours de la même période. La concurrence dans le langage Go est obtenue via goroutine. Goroutine est similaire à un thread et appartient à des milliers de goroutines. peuvent être créés selon les besoins.

Que signifie la concurrence au niveau du langage Go ?

L'environnement d'exploitation de cet article : système Windows 10, version go1.20, ordinateur Dell g3.

La concurrence au niveau du langage Go signifie utiliser le langage Go pour effectuer plusieurs tâches en même temps.

La concurrence est un concept très important en programmation. Le langage Go prend intrinsèquement en charge la concurrence au niveau du langage.

Concurrence et parallélisme

Concurrency : effectuez plusieurs tâches dans la même période (par exemple : discuter avec deux copines en utilisant WeChat).

Parallèle : effectuez plusieurs tâches en même temps (par exemple : vous et vos amis discutez tous les deux avec votre petite amie sur WeChat).

La concurrence dans le langage Go est réalisée via goroutine. Goroutine est similaire au thread (le thread et le processus sont des concepts dérivés du système d'exploitation. Un processus est équivalent à un grand atelier, et le CPU est équivalent à une usine. Il existe de nombreux ateliers. dans une usine, et le processus contrôle l'usine. Divisé en ateliers. Les threads sont divisés en processus, tels que les travailleurs et diverses ressources sur le processus. Nous pouvons créer des milliers de threads selon les besoins. Les Goroutines fonctionnent simultanément. Goroutine est planifié par le moteur d'exécution du langage Go et le deuxième thread est planifié par le système d'exploitation.

Le langage Go fournit également des canaux pour communiquer entre plusieurs goroutines. Goroutine et Channel sont une base d'implémentation importante pour que le langage Go adhère au mode de concurrence CSP (promouvant la communication via la mémoire partagée plutôt que la communication via la mémoire partagée)

Extension :

goroutine

est similaire à un fil, implémenté au niveau du langage, au niveau du langage S'exécute sur les threads du système d'exploitation.

Une goroutine doit correspondre à une fonction, et plusieurs goroutines peuvent être créées pour exécuter la même fonction.

Il est très pratique d'utiliser goroutine dans go. Lorsque vous appelez une fonction, vous pouvez créer une goroutine pour une fonction en ajoutant le mot-clé go devant elle.

Démarrer une seule goroutine :

package main
import (
"fmt"
"sync"
)
var wg sync.WaitGroup //WaitGroup等待方法
// goroutine demo
func hello(i int){
fmt.Println("Hello hello",i)
wg.Done() //此方法如果运行 ,通知wg把计数器 -1
}
func main() {  // 开启一个主goroutine去执行mian函数
wg.Add(10000)//(计数器)只有一个小弟为1,等待wg.Done()后-1,为0时停止等待
for i:=0; i<10000;i++{
//wg.Add(1) 可以给定10000个goroutine 也可以,每次循环+1
go hello(i) // 开启了一个独立的 goroutine去执行hello这个函数
}
fmt.Println("Hello main")
// 让我们的主goroutine 等待 goroutine 小弟 执行
// 如果不等待,独立的goroutine小弟,可能小弟这个goroutine还没有运行
//time.Sleep(time.Second) 第二种等待
wg.Wait()//等待所有小弟干完活
}

La différence entre une goroutine et un thread

Les threads du système d'exploitation (threads du système d'exploitation) ont chacun une mémoire de pile fixe (généralement 2 Mo), et la pile d'une goroutine n'a qu'une mémoire de pile fixe au début de son cycle de vie Une très petite pile (généralement 2 Ko). La pile de la goroutine n'est pas fixe. Elle peut s'agrandir et se réduire selon les besoins. La limite de taille de la pile de la grorutine peut atteindre 1 Go, mais dans de rares cas, elle atteindra 1 Go. Par conséquent, il est possible de créer environ 100 000 grorutines à la fois dans le langage Go.

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