Maison >développement back-end >Golang >Comment utiliser les coroutines Go pour implémenter le traitement parallèle ?
Comment utiliser les coroutines Go pour implémenter le traitement parallèle ? Créez une coroutine pour calculer la séquence de Fibonacci en parallèle. Les coroutines transfèrent les données via des canaux pour réaliser un calcul parallèle. La coroutine principale reçoit et traite les résultats des calculs parallèles. Comment utiliser la coroutine Go pour implémenter le traitement parallèle démarrer un nouveau fil ou un nouveau processus. Cela contribue à améliorer l’efficacité de la concurrence et à réduire la consommation de mémoire.
Cas pratique : calcul parallèle de la séquence de Fibonacci
Pour démontrer les capacités de traitement parallèle des coroutines, nous créons un programme Go pour calculer la séquence de Fibonacci en parallèle :
package main import ( "fmt" "time" ) func main() { ch := make(chan int) go fib(20, ch) // 启动一个协程计算斐波那契数 time.Sleep(100 * time.Millisecond) // 等待协程完成 result := <-ch // 从 channel 中接收计算结果 fmt.Println("斐波那契数列的第 20 项:", result) } func fib(n int, ch chan int) { if n <= 1 { ch <- 1 return } ch1 := make(chan int) ch2 := make(chan int) go fib(n-1, ch1) // 通过协程并行计算斐波那契数列 go fib(n-2, ch2) f1 := <-ch1 f2 := <-ch2 ch <- f1 + f2 // 并行计算的结果相加后发送到主协程 }
Exécutez le programme
Exécutez l'après le programme, le 20ème élément de la séquence de Fibonacci sera affiché dans le terminal :斐波那契数列的第 20 项: 6765
Notes
La coroutine n'a pas besoin de libérer explicitement des ressources.
Une utilisation excessive de coroutines peut entraîner des problèmes de performances car chaque coroutine possède son propre espace de pile. Pour les opérations de blocage (telles que les E/S), les canaux doivent être utilisés pour la communication au lieu de transmettre des données directement entre les coroutines.
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!