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!