Maison > développement back-end > Golang > Qu'est-ce que Golang asynchrone

Qu'est-ce que Golang asynchrone

青灯夜游
Libérer: 2022-12-28 10:54:45
original
4474 Les gens l'ont consulté

En golang, asynchrone signifie que l'exécution d'un processus asynchrone ne suit pas l'ordre du code. L'exécution d'un processus asynchrone n'aura plus de relation séquentielle avec la séquence d'origine en asynchrone, lorsqu'un appel de processus asynchrone est effectué ; émis, l'appelant n'obtient pas le résultat. Avant cela, vous pouvez continuer à effectuer les opérations suivantes. Golang asynchrone est principalement implémenté par coroutine (goroutine) ; goroutine est utilisé pour appeler des fonctions lorsqu'une fonction est appelée par le mot-clé go, go créera un élément de type coroutine pour exécuter la fonction, afin qu'elle puisse facilement atteindre la concurrence.

Qu'est-ce que Golang asynchrone

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

Qu'est-ce que l'asynchrone ?

Asynchrone (async) est un concept opposé à synchrone (Synchronous, sync). Dans la programmation monothread traditionnelle que nous avons étudiée, l'exécution du programme est synchrone (synchrone ne signifie pas que toutes les étapes s'exécutent en même temps, mais signifie que les étapes sont exécutées séquentiellement dans une séquence de flux de contrôle). Le concept d'asynchrone est un concept qui ne garantit pas la synchronisation, c'est-à-dire que l'exécution d'un processus asynchrone n'aura plus de relation séquentielle avec la séquence d'origine.

Une compréhension simple est la suivante : la synchronisation est exécutée dans l'ordre de votre code, l'exécution asynchrone n'est pas dans l'ordre du code et l'exécution asynchrone est plus efficace.

Une autre explication est :

Donnez-vous deux conteneurs, l'un est appelé synchrone et l'autre est appelé asynchrone. Divisez le code à exécuter respectivement en synchrone et asynchrone et attendez que l'asynchrone soit compilé, et attendez l'exécution synchrone. Après avoir terminé, exécutez le code à l'intérieur de manière asynchrone.

Comment implémenter l'asynchrone dans Golang

L'asynchrone de Go est principalement implémenté par coroutine (goroutine). Par rapport aux threads, les coroutines occupent moins de mémoire et sont plus légères, ce qui constitue également l'avantage de Go en termes de performances.

Le langage Go est un langage de programmation simultané. Il existe un mot-clé go (goroutine) très important dans Go. Généralement, nous pouvons l'utiliser pour effectuer certaines tâches asynchrones et simultanées.
goroutine est utilisé pour appeler des fonctions. Lorsqu'une fonction est appelée par le mot-clé go, go créera un élément semblable à une coroutine pour exécuter la fonction, afin que la concurrence puisse être facilement obtenue.

Exemple :

package main
import (
	"fmt"
)
func main() {
	go work1()
	go work2()
	fmt.Println("[全部完成]")
}
func work1(){
	fmt.Println("work1")
}
func work2(){
	fmt.Println("work2")
}
Copier après la connexion

Résultat :

[全部完成]
Copier après la connexion

Bien sûr, c'est un exemple inapproprié, mais cela prouve également une exécution asynchrone. Après avoir appelé work1 et work2, l'exécution continue sans attendre les résultats de sortie.
Si vous souhaitez attendre la fin de l'exécution asynchrone avant d'exécuter la sortie finale, vous devez rejoindre le WaitGroup

Exemple correct :

package main

import (
	"fmt"
	"sync"
)

var waitGroup sync.WaitGroup
func main() {
	waitGroup.Add(2)
	go work1()
	go work2()
	waitGroup.Wait()
	fmt.Println("[全部完成]")
}
func work1(){
	fmt.Println("work1")
	waitGroup.Done()
}
func work2(){
	fmt.Println("work2")
	waitGroup.Done()
}
Copier après la connexion

Résultat :

work2
work1
[全部完成]
Copier après la connexion

[Recommandations associées : Tutoriel vidéo Go, Enseignement de la programmation ]

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