Maison développement back-end Golang Guide de programmation simultanée : Exploration du parallélisme dans la bibliothèque standard Golang

Guide de programmation simultanée : Exploration du parallélisme dans la bibliothèque standard Golang

Jan 20, 2024 am 09:08 AM
golang 并发编程 bibliothèque standard

Guide de programmation simultanée : Exploration du parallélisme dans la bibliothèque standard Golang

Guide de programmation simultanée dans la bibliothèque standard de Golang

Introduction :
La programmation simultanée est un moyen important pour résoudre les problèmes de performances des programmes et parvenir à une utilisation efficace des ressources informatiques. Le langage de programmation Golang fournit une multitude d’outils et de méthodes de programmation simultanée. Cet article présentera certaines techniques de programmation simultanée courantes dans la bibliothèque standard Golang et illustrera leur utilisation et leurs précautions à travers des exemples de code spécifiques.

  1. Goroutine (Coroutine)
    Goroutine est un fil de discussion léger en Golang, lancé par le mot-clé Go. Grâce à Goroutine, nous pouvons exécuter plusieurs tâches en même temps dans le programme pour obtenir des effets d'exécution à haute concurrence. Ce qui suit est un exemple simple de Goroutine :
package main

import (
    "fmt"
    "time"
)

func printNumbers() {
    for i := 0; i < 5; i++ {
        fmt.Printf("%d ", i)
        time.Sleep(time.Millisecond * 500)
    }
}

func printLetters() {
    for i := 'A'; i < 'F'; i++ {
        fmt.Printf("%c ", i)
        time.Sleep(time.Millisecond * 500)
    }
}

func main() {
    go printNumbers()    // 启动一个Goroutine,打印数字
    go printLetters()    // 启动另一个Goroutine,打印字母

    time.Sleep(time.Second * 3)    // 等待两个Goroutine执行完毕
    fmt.Println("Done")
}
Copier après la connexion

Dans le code ci-dessus, nous avons défini deux fonctions printNumbers et printLetters respectivement, et avons passé go Le mot-clé code> les démarre respectivement comme deux Goroutines. Utilisez la fonction time.Sleep pour attendre que les deux Goroutines terminent l'exécution. Vous pouvez voir que les chiffres et les lettres sont affichés alternativement dans les résultats de sortie. printNumbersprintLetters两个函数,并通过go关键字将它们分别启动为两个Goroutine。通过time.Sleep函数等待两个Goroutine执行完毕,可以看到输出结果中数字和字母是交替输出的。

  1. Channel(通道)
    在Golang中,Goroutine之间的通信使用Channel(通道)来完成。Channel是一种类型安全的队列,用于在Goroutine之间传递数据。下面是一个简单的Channel示例:
package main

import (
    "fmt"
    "time"
)

func worker(id int, jobs <-chan int, results chan<- int) {
    for job := range jobs {
        fmt.Printf("Worker %d started job %d
", id, job)
        time.Sleep(time.Second)
        fmt.Printf("Worker %d finished job %d
", id, job)
        results <- job * 2
    }
}

func main() {
    numJobs := 5
    jobs := make(chan int, numJobs)
    results := make(chan int, numJobs)

    numWorkers := 3
    for w := 1; w <= numWorkers; w++ {
        go worker(w, jobs, results)
    }

    for j := 1; j <= numJobs; j++ {
        jobs <- j
    }
    close(jobs)

    for a := 1; a <= numJobs; a++ {
        result := <-results
        fmt.Println("Result:", result)
    }
}
Copier après la connexion

在上述代码中,我们定义了worker函数,该函数用于接收jobs通道传入的数字,并进行相应的处理,结果通过results通道返回。在主函数中,我们分别创建了jobs和results两个通道,并将jobs通道传递给三个Goroutine执行。然后,通过for循环向jobs通道发送5个作业,并关闭通道。最后,通过for循环接收results通道的返回结果并输出。

  1. WaitGroup(等待组)
    在并发编程中,经常需要等待多个Goroutine的全部执行完成后再进行下一步的操作。Golang中的sync包提供了WaitGroup类型来实现这个功能。下面是一个使用WaitGroup的示例:
package main

import (
    "fmt"
    "sync"
    "time"
)

func worker(id int, wg *sync.WaitGroup) {
    defer wg.Done()
    fmt.Printf("Worker %d starting
", id)
    time.Sleep(time.Second)
    fmt.Printf("Worker %d done
", id)
}

func main() {
    var wg sync.WaitGroup

    numWorkers := 3
    wg.Add(numWorkers)
    for w := 1; w <= numWorkers; w++ {
        go worker(w, &wg)
    }

    wg.Wait()
    fmt.Println("All workers done")
}
Copier après la connexion

在上述代码中,我们定义了worker函数,该函数接收一个WaitGroup参数,执行相应的任务,并在任务执行完成后通过Done方法通知WaitGroup。在主函数中,我们创建了一个WaitGroup变量,并通过Add方法指定需要等待的Goroutine数量。然后,使用go关键字启动相应数量的Goroutine,并将WaitGroup指针传递给每个Goroutine。最后,通过Wait

    Channel

    Dans Golang, la communication entre les Goroutines s'effectue à l'aide de Channel. Channel est une file d'attente de type sécurisé utilisée pour transmettre des données entre Goroutines. Voici un exemple simple de canal :

    rrreee🎜Dans le code ci-dessus, nous définissons la fonction worker, qui est utilisée pour recevoir les numéros transmis par le canal jobs et les traiter en conséquence. est transmis. Le canal Résultats est renvoyé. Dans la fonction principale, nous avons créé deux canaux, respectivement les tâches et les résultats, et avons transmis le canal des tâches à trois Goroutines pour exécution. Ensuite, envoyez 5 tâches au canal jobs via la boucle for et fermez le canal. Enfin, le résultat de retour du canal de résultats est reçu via la boucle for et la sortie. 🎜
      🎜WaitGroup (waiting group)🎜En programmation simultanée, il est souvent nécessaire d'attendre la fin de toutes les exécutions de plusieurs Goroutines avant de passer à l'étape suivante. Le package sync dans Golang fournit le type WaitGroup pour implémenter cette fonction. Voici un exemple d'utilisation de WaitGroup : 🎜🎜rrreee🎜Dans le code ci-dessus, nous définissons la fonction worker, qui reçoit un paramètre WaitGroup, exécute la tâche correspondante et passe Terminé informe WaitGroup. Dans la fonction principale, nous créons une variable WaitGroup et spécifions le nombre de Goroutines à attendre via la méthode Add. Ensuite, utilisez le mot-clé go pour démarrer le nombre correspondant de Goroutines et transmettez le pointeur WaitGroup à chaque Goroutine. Enfin, attendez la fin de toutes les exécutions de Goroutine via la méthode Wait. 🎜🎜Résumé : 🎜Grâce aux outils et méthodes de programmation simultanée fournis dans la bibliothèque standard Golang, nous pouvons facilement implémenter des programmes à haute concurrence. Cet article présente les techniques de programmation simultanée courantes telles que Goroutine, Channel et WaitGroup, et les illustre avec des exemples de code spécifiques. J'espère que les lecteurs pourront mieux maîtriser les compétences de programmation simultanée dans Golang et améliorer les performances et l'efficacité opérationnelle du programme en étudiant cet article. 🎜

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 de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment lire et écrire des fichiers en toute sécurité avec Golang ? Comment lire et écrire des fichiers en toute sécurité avec Golang ? Jun 06, 2024 pm 05:14 PM

Lire et écrire des fichiers en toute sécurité dans Go est crucial. Les directives incluent : Vérification des autorisations de fichiers Fermeture de fichiers à l'aide de reports Validation des chemins de fichiers Utilisation de délais d'attente contextuels Le respect de ces directives garantit la sécurité de vos données et la robustesse de vos applications.

À quoi sert généralement la somme dans le langage C? À quoi sert généralement la somme dans le langage C? Apr 03, 2025 pm 02:39 PM

Il n'y a pas de fonction nommée "SUM" dans la bibliothèque de norme de langage C. La «somme» est généralement définie par les programmeurs ou fournie dans des bibliothèques spécifiques, et sa fonctionnalité dépend de l'implémentation spécifique. Les scénarios courants résument pour les tableaux et peuvent également être utilisés dans d'autres structures de données, telles que les listes liées. De plus, la «somme» est également utilisée dans des champs tels que le traitement d'image et l'analyse statistique. Une excellente fonction de "somme" devrait avoir une bonne lisibilité, une robustesse et une efficacité.

Quatre façons d'implémenter le multithreading dans le langage C Quatre façons d'implémenter le multithreading dans le langage C Apr 03, 2025 pm 03:00 PM

Le multithreading dans la langue peut considérablement améliorer l'efficacité du programme. Il existe quatre façons principales d'implémenter le multithreading dans le langage C: créer des processus indépendants: créer plusieurs processus en cours d'exécution indépendante, chaque processus a son propre espace mémoire. Pseudo-Multithreading: Créez plusieurs flux d'exécution dans un processus qui partagent le même espace mémoire et exécutent alternativement. Bibliothèque multi-thread: Utilisez des bibliothèques multi-threades telles que PTHEADS pour créer et gérer des threads, en fournissant des fonctions de fonctionnement de thread riches. Coroutine: une implémentation multi-thread légère qui divise les tâches en petites sous-tâches et les exécute tour à tour.

Transformant du développement frontal au développement back-end, est-il plus prometteur d'apprendre Java ou Golang? Transformant du développement frontal au développement back-end, est-il plus prometteur d'apprendre Java ou Golang? Apr 02, 2025 am 09:12 AM

Chemin d'apprentissage du backend: le parcours d'exploration du front-end à l'arrière-end en tant que débutant back-end qui se transforme du développement frontal, vous avez déjà la base de Nodejs, ...

Comment utiliser un fuseau horaire prédéfini avec Golang ? Comment utiliser un fuseau horaire prédéfini avec Golang ? Jun 06, 2024 pm 01:02 PM

L'utilisation de fuseaux horaires prédéfinis dans Go comprend les étapes suivantes : Importez le package « time ». Chargez un fuseau horaire spécifique via la fonction LoadLocation. Utilisez le fuseau horaire chargé dans des opérations telles que la création d'objets Time, l'analyse de chaînes horaires et l'exécution de conversions de date et d'heure. Comparez les dates en utilisant différents fuseaux horaires pour illustrer l'application de la fonctionnalité de fuseau horaire prédéfini.

Objectif de Golang: Construire des systèmes efficaces et évolutifs Objectif de Golang: Construire des systèmes efficaces et évolutifs Apr 09, 2025 pm 05:17 PM

GO Language fonctionne bien dans la construction de systèmes efficaces et évolutifs. Ses avantages incluent: 1. Haute performance: compilé en code machine, vitesse de course rapide; 2. Programmation simultanée: simplifier le multitâche via les goroutines et les canaux; 3. Simplicité: syntaxe concise, réduction des coûts d'apprentissage et de maintenance; 4. Plate-forme multipliée: prend en charge la compilation multiplateforme, déploiement facile.

Quelles bibliothèques de GO sont développées par de grandes entreprises ou fournies par des projets open source bien connus? Quelles bibliothèques de GO sont développées par de grandes entreprises ou fournies par des projets open source bien connus? Apr 02, 2025 pm 04:12 PM

Quelles bibliothèques de GO sont développées par de grandes entreprises ou des projets open source bien connus? Lors de la programmation en Go, les développeurs rencontrent souvent des besoins communs, ...

Fonction de fonction distincte Distance de distance C Tutoriel d'utilisation Fonction de fonction distincte Distance de distance C Tutoriel d'utilisation Apr 03, 2025 pm 10:27 PM

STD :: Unique supprime les éléments en double adjacents dans le conteneur et les déplace jusqu'à la fin, renvoyant un itérateur pointant vers le premier élément en double. STD :: Distance calcule la distance entre deux itérateurs, c'est-à-dire le nombre d'éléments auxquels ils pointent. Ces deux fonctions sont utiles pour optimiser le code et améliorer l'efficacité, mais il y a aussi quelques pièges à prêter attention, tels que: std :: unique traite uniquement des éléments en double adjacents. STD :: La distance est moins efficace lorsqu'il s'agit de transacteurs d'accès non aléatoires. En maîtrisant ces fonctionnalités et les meilleures pratiques, vous pouvez utiliser pleinement la puissance de ces deux fonctions.

See all articles