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 ?

WBOY
WBOYoriginal
2024-06-05 18:07:01699parcourir

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.

如何使用 Go 协程实现并行处理?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!

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