Maison > Article > développement back-end > Comment gérer la simultanéité dans Golang ?
La gestion de la concurrence dans Go implique l'utilisation de goroutines (unités d'exécution simultanées), de canaux (mécanismes de transfert de données) et de groupes d'attente (mécanismes de synchronisation). En créant des goroutines et en exploitant les canaux pour transférer des données en toute sécurité, les développeurs peuvent effectuer plusieurs tâches simultanément. Les groupes d'attente permettent d'attendre que les goroutines terminent leurs tâches. La combinaison de ces mécanismes permet aux applications Go de gérer la concurrence de manière efficace et réactive.
Introduction
La concurrence est un concept de programmation important qui permet d'effectuer plusieurs tâches simultanément, augmentant ainsi l'efficacité et la réactivité. Dans Go, la concurrence peut être obtenue via goroutine, qui est un thread léger.
Goroutine
Goroutine est une unité d'exécution simultanée dans Go. Ils sont planifiés et distribués automatiquement par le runtime Go. La syntaxe pour créer une nouvelle goroutine est la suivante :
go func() { // goroutine 的代码在此处执行 }
Channel
Un canal est un mécanisme de communication qui permet une transmission de données sûre et fiable entre les goroutines. La syntaxe est la suivante :
ch := make(chan Type, bufferSize)
où Type
是通道传输的数据类型,bufferSize
est la capacité tampon du canal.
WaitGroup
Wait group est un mécanisme de synchronisation dans Go, qui permet d'attendre que plusieurs goroutines terminent leurs tâches respectives. La syntaxe est la suivante :
var wg sync.WaitGroup
Exemple pratique : Serveur Web simultané
Voici un exemple simple de création d'un serveur Web utilisant la concurrence :
// demo.go package main import ( "log" "net/http" "sync" ) var wg sync.WaitGroup func main() { // 创建一个通道来接收 HTTP 请求 reqs := make(chan *http.Request) // 创建一个 goroutine 来处理请求 wg.Add(1) go func() { defer wg.Done() for req := range reqs { // 处理请求... } }() // 创建 HTTP 服务器 srv := &http.Server{ Addr: ":8080", Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { reqs <- r }), } // 运行服务器 log.Fatal(srv.ListenAndServe()) }
Conclusion
En utilisant des goroutines, des canaux et des groupes d'attente, il peut être facilement réalisé dans Go Manage la simultanéité. Cela permet aux développeurs de créer des applications efficaces et réactives.
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!