Maison >développement back-end >Golang >Comment utiliser le multithreading dans Go ?

Comment utiliser le multithreading dans Go ?

WBOY
WBOYoriginal
2023-05-11 16:36:242363parcourir

Go est un langage de programmation puissant avec une riche prise en charge de la concurrence. Utiliser le multithreading dans Go est très simple et constitue une fonctionnalité importante de Go. Dans cet article, nous explorerons comment utiliser le multithreading dans Go et pourquoi cette technique est si utile.

Qu'est-ce que le multithreading ?

Le multi-threading est une méthode de programmation concurrente qui permet d'exécuter plusieurs fragments de code de programme simultanément dans le même programme. Ces morceaux de code sont appelés threads. Chaque thread possède son propre chemin d'exécution et plusieurs threads peuvent être exécutés simultanément.

L'avantage du multi-threading est qu'il peut améliorer l'efficacité d'exécution du programme. Lorsque le programme doit effectuer des opérations fastidieuses, nous pouvons placer ces opérations dans un thread, puis continuer à exécuter un autre code dans un autre thread pour atteindre l'objectif d'améliorer l'efficacité du programme.

Multi-threading dans le langage Go

Go prend en charge la programmation simultanée au niveau du langage. Son mécanisme de programmation concurrente est basé sur Goroutine et Channel. Goroutine est un thread léger dans Go. Sa création et sa destruction sont beaucoup plus rapides que les threads traditionnels. Le canal est une méthode de communication entre coroutines, qui prend en charge la transmission de messages synchrones et asynchrones.

Programmation multithread avec Goroutine

Créer un nouveau Goroutine est très simple et cela peut être fait avec le mot-clé go. Dans l'exemple ci-dessous, nous créons deux Goroutines pour imprimer des nombres.

package main

import (
    "fmt"
)

func printDigits(start int, end int) {
    for i := start; i <= end; i++ {
        fmt.Println(i)
    }
}

func main() {
    go printDigits(1, 5)
    go printDigits(6, 10)
}

Dans cet exemple, nous avons créé deux Goroutines pour exécuter la fonction printDigits. Cette fonction imprimera les numéros du début à la fin. Dans la fonction principale, nous utilisons le mot-clé go pour créer une Goroutine. De cette façon, les deux fonctions seront exécutées en même temps car elles sont placées dans des Goroutines différentes.

Utiliser Channel pour la communication entre Goroutines

Dans Go, la communication entre Goroutines est mise en œuvre via Channel. Le canal est un type spécial qui peut transmettre des données entre coroutines. Un canal peut être utilisé à la fois pour envoyer et recevoir des données. Dans l'exemple suivant, nous créons un canal pour envoyer des données d'un Goroutine à un autre Goroutine.

package main

import (
    "fmt"
)

func sum(a []int, c chan int) {
    sum := 0
    for _, v := range a {
        sum += v
    }
    c <- sum // 把 sum 发送到通道 c
}

func main() {
    a := []int{7, 2, 8, -9, 4, 0}

    c := make(chan int)
    go sum(a[:len(a)/2], c)
    go sum(a[len(a)/2:], c)
    x, y := <-c, <-c // 从通道 c 中接收

    fmt.Println(x, y, x+y)
}

Dans cet exemple, nous avons créé une fonction somme qui calculera la somme des nombres dans une tranche. Cette fonction acceptera une tranche et un canal comme paramètres, puis enverra la somme au canal.

Dans la fonction principale, nous créons d'abord une tranche de longueur 6 et la divisons en deux parties. Nous avons ensuite créé un Channel pour recevoir la somme des deux Goroutines. Ensuite, nous démarrons deux Goroutines, chaque Goroutine appellera la fonction somme pour calculer une partie de la tranche. Finalement, nous recevons la somme de la Chaîne, additionnons les deux sommes et les imprimons.

Résumé

Le mécanisme de programmation multithread du langage Go est très simple et facile à utiliser. Le traitement parallèle et la transmission de données peuvent être facilement réalisés à l'aide de Goroutine et Channel. Cette technique peut grandement améliorer l’efficacité du programme, notamment lors du traitement de données à grande échelle. Pour les applications nécessitant une simultanéité efficace, le langage Go est un très bon choix.

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