Maison  >  Article  >  développement back-end  >  Partage pratique des appels simultanés des fonctions Golang

Partage pratique des appels simultanés des fonctions Golang

王林
王林original
2023-05-18 08:15:151596parcourir

En tant que langage de programmation efficace et léger avec une bonne prise en charge de la concurrence, l'appel de fonctions simultanées de Golang est une fonctionnalité très importante. Dans cet article, cet article partagera une expérience pratique sur les appels simultanés de fonctions Golang, dans l'espoir d'être utile aux développeurs Golang.

1. L'utilisation de Goroutine

Goroutine est la base de Golang pour atteindre la concurrence. Utiliser Goroutine pour appeler une fonction est très simple, ajoutez simplement le mot-clé go devant la fonction :

go funcName()

Le code ci-dessus peut appeler la fonction funcName dans un nouveau Goroutine. L'implémentation du code spécifique et les paramètres de la fonction appelante dépendent de la situation.

2. Appeler un ensemble de fonctions simultanément

Dans Golang, un ensemble de fonctions peut être appelé en même temps. L'utilisation de sync.WaitGroup peut aider à coordonner les tâches effectuées par différents Goroutines. Voici un exemple de code qui appelle un groupe de fonctions simultanément :

// 定义一个 WaitGroup 
var wg sync.WaitGroup

func main() {
    // 增加 WaitGroup 的计数器值
    wg.Add(3)

    // 并发调用 3 个函数
    go func1()
    go func2()
    go func3()

    // 等待所有进行中的 Goroutines 完成任务
    wg.Wait()
}

// func1 函数
func func1() {
    // 告诉 WaitGroup 函数执行完毕
    defer wg.Done()

    // 执行 func1 的操作
}

// func2 函数
func func2() {
    // 告诉 WaitGroup 函数执行完毕
    defer wg.Done()

    // 执行 func2 的操作
}

// func3 函数
func func3() {
    // 告诉 WaitGroup 函数执行完毕
    defer wg.Done()

    // 执行 func3 的操作
}

3. Utilisez des canaux pour implémenter des appels simultanés

L'utilisation de canaux permet à plusieurs Goroutines de communiquer entre elles et d'implémenter des appels simultanés. Voici un exemple de code qui appelle un groupe de fonctions simultanément :

func main() {
    // 定义 channel
    c := make(chan int)

    // 并发调用 3 个函数
    go func1(c)
    go func2(c)
    go func3(c)

    // 等待所有 Goroutine 执行完毕
    for i := 0; i < 3; i++ {
        <-c
    }
}

// func1 函数
func func1(c chan<- int) {
    // 执行 func1 的操作

    // 发送信号
    c <- 1
}

// func2 函数
func func2(c chan<- int) {
    // 执行 func2 的操作

    // 发送信号
    c <- 2
}

// func3 函数
func func3(c chan<- int) {
    // 执行 func3 的操作

    // 发送信号
    c <- 3
}

4. Utilisez plusieurs canaux pour implémenter des appels simultanés

Si vous devez transmettre plusieurs paramètres ou données dans différents Goroutines, vous pouvez utiliser plusieurs canaux pour implémenter des appels simultanés. . Ce qui suit est un exemple de code qui appelle un groupe de fonctions simultanément :

func main() {
    // 定义 channel
    c1 := make(chan int)
    c2 := make(chan string)

    // 并发调用 3 个函数
    go func1(c1, c2)
    go func2(c2)
    go func3(c1)

    // 等待所有 Goroutine 执行完毕
    for i := 0; i < 2; i++ {
        <-c1
    }
}

// func1 函数
func func1(c1 chan<- int, c2 chan<- string) {
    // 执行 func1 的操作

    // 发送数据
    c1 <- 1
    c2 <- "hello"
}

// func2 函数
func func2(c2 <-chan string) {
    // 执行 func2 的操作

    // 读取数据
    data := <-c2
}

// func3 函数
func func3(c1 <-chan int) {
    // 执行 func3 的操作

    // 读取数据
    data := <-c1
}

Ce qui précède est un partage d'expérience pratique sur l'appel simultané de fonctions Golang. En utilisant correctement Goroutine, Channel et sync.WaitGroup, des appels simultanés efficaces, sûrs et fiables de plusieurs fonctions peuvent être réalisés. Dans la pratique, vous devez également veiller à contrôler raisonnablement le nombre de Goroutines pour éviter des problèmes tels qu'une impasse et une concurrence pour les ressources.

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