Maison  >  Article  >  développement back-end  >  Comment gérer la simultanéité dans Golang ?

Comment gérer la simultanéité dans Golang ?

WBOY
WBOYoriginal
2024-06-04 15:47:01385parcourir

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.

如何在 Golang 中管理并发?

Comment gérer la simultanéité dans Golang ?

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)

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!

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