Maison  >  Article  >  développement back-end  >  Comment faire de la concurrence dans Golang

Comment faire de la concurrence dans Golang

(*-*)浩
(*-*)浩original
2019-12-30 15:29:202261parcourir

Comment faire de la concurrence dans Golang

Le modèle de concurrence CSP de Go

Go implémente deux formes de concurrence. La première est généralement reconnue par tous : la mémoire partagée multithread. En fait, il s’agit d’un développement multithread dans des langages comme Java ou C++.

Un autre est unique au langage Go et recommandé par le langage Go : le modèle de concurrence CSP (communiquer des processus séquentiels). (Apprentissage recommandé : go)

Le modèle de concurrence CSP était un concept proposé vers 1970. Il s'agit d'un concept relativement nouveau et différent des multithreads traditionnels communiquant via la mémoire partagée , CSP se concentre sur le « partage de mémoire par la communication ».

N'oubliez pas la phrase suivante :

Do not communicate by sharing memory; instead, share memory by communicating.
“不要以共享内存的方式来通信,相反,要通过通信来共享内存。”

Le modèle de concurrence de threads ordinaire est comme Java, C++ ou Python. La communication entre les threads se fait via la méthode de partage de mémoire.

Une manière très courante consiste à accéder aux données partagées (telles qu'un tableau, une carte ou une structure ou un objet) via un verrou. Par conséquent, dans de nombreux cas, une opération pratique est dérivée. La structure de données est appelée un. "structure de données thread-safe".

Par exemple, la structure de données du package "java.util.concurrent" fourni par Java. Le modèle traditionnel de concurrence de threads est également implémenté dans Go.

Le modèle de concurrence CSP de Go est implémenté via goroutine et canal.

goroutine est l'unité d'exécution simultanée du langage Go. C'est un peu abstrait, mais c'est en fait similaire au concept traditionnel de « fil » et peut être compris comme « fil ».

Channel est le mécanisme de communication avant chaque structure concurrente (goroutine) dans le langage Go. En termes simples, il s'agit du « pipeline » pour la communication entre les goroutines, qui est quelque peu similaire aux tuyaux de Linux.

La façon de générer une goroutine est très simple : Allez-y et elle sera générée.

go f();

Le canal du mécanisme de communication est également très pratique. Utilisez le canal <- data pour transmettre des données et <-channel pour récupérer des données.

Pendant le processus de communication, le canal de transmission de données <- data et le canal de récupération de données <- apparaîtront inévitablement par paires, car la transmission ici et la récupération là-bas se font uniquement entre les deux goroutines . Activer la communication.

Et peu importe qu'il soit transmis ou récupéré, il sera bloqué jusqu'à ce qu'un autre goroutine passe ou récupère.

Il existe deux goroutines, dont l'une initie une opération de transfert de valeur vers le canal. (goroutine est un rectangle, canal est une flèche)

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