Maison développement back-end Golang Expérience d'application des Goroutines et des canaux dans Golang

Expérience d'application des Goroutines et des canaux dans Golang

Aug 07, 2023 pm 02:57 PM
goroutines channels golang (go)

Golang 中 Goroutines 和 Channels 的应用心得

Expérience d'application des Goroutines et des canaux dans Golang

Golang est un langage de programmation multiplateforme avec des performances efficaces et une syntaxe concise. Les Goroutines et les canaux sont deux caractéristiques importantes de sa programmation simultanée. Cet article partagera quelques expériences d'utilisation des Goroutines et des canaux dans des applications pratiques et les démontrera à travers des exemples de code.

Tout d'abord, les Goroutines sont des threads légers dans Golang qui peuvent s'exécuter de manière asynchrone. En ajoutant le mot-clé "go" avant l'appel de fonction, le bloc de code de fonction peut être encapsulé dans un Goroutine. Voici un exemple simple :

package main

import (
    "fmt"
    "time"
)

func printNumbers() {
    for i := 1; i <= 5; i++ {
        fmt.Println(i)
    }
}

func main() {
    go printNumbers() // 启动一个 Goroutine

    time.Sleep(1 * time.Second) // 等待 Goroutine 执行完毕
}
Copier après la connexion

Dans le code ci-dessus, nous utilisons go printNumbers() dans la fonction main pour démarrer une Goroutine et utiliser time. pour attendre la fin de l'exécution de Goroutine. De cette façon, pendant l'exécution de Goroutine, le thread principal peut continuer à effectuer d'autres tâches. main 函数中使用 go printNumbers() 启动了一个 Goroutine,并使用 time.Sleep 函数来等待 Goroutine 的执行完毕。这样就可以在 Goroutine 执行的同时,主线程也可以继续执行其他任务。

接下来,Channels 是 Golang 中用于 Goroutines 之间通信的机制。可以将 Channel 看作是一条管道,Goroutine 可以将数据发送到 Channel 中,而其他 Goroutine 则可以从 Channel 中接收数据。下面是一个简单的示例:

package main

import (
    "fmt"
)

func printNumbers(numbers chan int) {
    for i := 1; i <= 5; i++ {
        numbers <- i // 发送数据到 Channel
    }
    close(numbers) // 关闭 Channel
}

func main() {
    numbers := make(chan int)

    go printNumbers(numbers)

    for number := range numbers { // 从 Channel 中接收数据
        fmt.Println(number)
    }
}
Copier après la connexion

上述代码中,我们创建了一个整型的 Channel numbers,并在 printNumbers 函数中使用 <- 操作符发送数据到该 Channel 中。在 main 函数中使用 range 循环从 Channel 中接收数据,这里需要注意的是,当 Channel 被关闭后,循环会自动退出。

除了在 Goroutines 之间传递数据,Channels 还可以用于控制 Goroutines 的执行顺序。下面是一个使用两个 Channels 实现的简单示例:

package main

import (
    "fmt"
)

func printNumbers(numbers chan int, done chan bool) {
    for i := 1; i <= 5; i++ {
        numbers <- i // 发送数据到 Channel
    }
    done <- true // 发送完成信号到 done Channel
}

func printSquares(numbers chan int, done chan bool) {
    for number := range numbers { // 从 numbers Channel 中接收数据
        fmt.Println(number * number)
    }
    done <- true // 发送完成信号到 done Channel
}

func main() {
    numbers := make(chan int)
    done := make(chan bool)

    go printNumbers(numbers, done)
    go printSquares(numbers, done)

    <-done // 等待 printNumbers Goroutine 完成
    <-done // 等待 printSquares Goroutine 完成
}
Copier après la connexion

上述代码中,我们创建了两个 Channels numbersdone,分别用于传递数字和完成信号。在 printNumbersprintSquares 两个函数中,我们通过 Channel 的方式实现了数据的交换和控制 Goroutines 的执行顺序。最后通过 <-done

Ensuite, les canaux sont le mécanisme de Golang pour la communication entre les Goroutines. Un canal peut être considéré comme un canal. Les Goroutines peuvent envoyer des données au canal, et d'autres Goroutines peuvent recevoir des données du canal. Voici un exemple simple :

rrreee

Dans le code ci-dessus, nous créons un canal entier numbers et utilisons <- dans la fonction printNumbers l'opérateur envoie des données au canal. Utilisez la boucle range dans la fonction main pour recevoir des données du canal. Il convient de noter que lorsque le canal est fermé, la boucle se ferme automatiquement.

En plus de transmettre des données entre Goroutines, les canaux peuvent également être utilisés pour contrôler l'ordre d'exécution des Goroutines. Ce qui suit est un exemple simple implémenté en utilisant deux canaux :
    rrreee
  1. Dans le code ci-dessus, nous avons créé deux canaux numbers et done, qui sont utilisés respectivement pour transmettre les nombres et la complétion. . Dans les deux fonctions printNumbers et printSquares, nous implémentons l'échange de données et contrôlons l'ordre d'exécution des Goroutines via Channel. Enfin, utilisez <-done pour bloquer le thread principal et attendez que les deux Goroutines terminent leur exécution.
  2. Grâce à l'exemple de code ci-dessus, nous pouvons voir les fonctions puissantes des Goroutines et des canaux pour réaliser une programmation simultanée efficace dans Golang. Bien entendu, les applications de Goroutines et de Channels ne se limitent pas aux exemples ci-dessus. En fonction des besoins et des scénarios réels, nous pouvons utiliser ces deux fonctionnalités de manière flexible pour améliorer les performances et la concurrence du programme.
  3. Dans les applications pratiques, nous devons prêter attention aux points suivants :

Lors de l'utilisation de Goroutines, veillez à contrôler le nombre de concurrences pour éviter qu'un excès de Goroutines ne provoque un épuisement des ressources du système.

🎜Lorsque vous utilisez des canaux pour le transfert de données, utilisez une taille de tampon appropriée pour équilibrer la vitesse d'envoi et de réception afin d'éviter une impasse ou un blocage grave. 🎜🎜Après la fermeture de la chaîne, évitez de continuer à lui envoyer des données, sinon cela provoquerait la panique. 🎜🎜🎜En résumé, Goroutines et Channels sont de puissantes fonctionnalités de programmation simultanée dans Golang. Leur utilisation appropriée peut améliorer les performances et les capacités de concurrence du programme. Grâce à la démonstration d'un exemple de code, nous avons une compréhension plus claire de l'utilisation des Goroutines et des canaux. Dans les applications réelles, nous devons choisir et utiliser ces deux fonctionnalités de manière flexible pour obtenir une programmation simultanée efficace basée sur les besoins et les scénarios. 🎜

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

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

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 implémenter le traitement de flux vidéo à haute concurrence via Goroutines Comment implémenter le traitement de flux vidéo à haute concurrence via Goroutines Jul 21, 2023 pm 02:46 PM

Comment réaliser un traitement de flux vidéo à haute simultanéité via Goroutines Résumé : À l'ère d'Internet d'aujourd'hui, le streaming vidéo est devenu une forme médiatique très importante. Cependant, avec la croissance continue des données vidéo, les méthodes traditionnelles de traitement en série ne peuvent plus répondre aux exigences élevées de concurrence, et Goroutines peut bien résoudre ce problème. Cet article explique comment utiliser Goroutines pour implémenter le traitement de flux vidéo à haute concurrence et donne des exemples de code correspondants. 1. Que sont les Goroutines ? Gorou

Méthode de traitement asynchrone de la programmation simultanée Select Channels Go à l'aide de Golang Méthode de traitement asynchrone de la programmation simultanée Select Channels Go à l'aide de Golang Sep 28, 2023 pm 05:27 PM

Méthode de traitement asynchrone de la programmation simultanée SelectChannelsGo à l'aide de golang Introduction : La programmation simultanée est un domaine important dans le développement de logiciels modernes, qui peut améliorer efficacement les performances et la réactivité des applications. Dans le langage Go, la programmation simultanée peut être implémentée de manière simple et efficace à l'aide des instructions Channels et Select. Cet article explique comment utiliser Golang pour les méthodes de traitement asynchrone de la programmation simultanée SelectChannelsGo et fournit des informations spécifiques.

Implémentation d'un système de reconnaissance d'images hautement concurrent utilisant Go et Goroutines Implémentation d'un système de reconnaissance d'images hautement concurrent utilisant Go et Goroutines Jul 22, 2023 am 10:58 AM

Utiliser Go et Goroutines pour mettre en œuvre un système de reconnaissance d'images hautement concurrent Introduction : Dans le monde numérique d'aujourd'hui, la reconnaissance d'images est devenue une technologie importante. Grâce à la reconnaissance d'images, nous pouvons convertir des informations telles que des objets, des visages, des scènes, etc. dans les images en données numériques. Cependant, pour la reconnaissance de données d’images à grande échelle, la vitesse devient souvent un défi. Afin de résoudre ce problème, cet article présentera comment utiliser le langage Go et Goroutines pour implémenter un système de reconnaissance d'images à haute concurrence. Contexte : Aller à la langue

Comment utiliser Goroutines pour les transactions financières à haute concurrence en langage Go Comment utiliser Goroutines pour les transactions financières à haute concurrence en langage Go Jul 22, 2023 pm 02:27 PM

Comment utiliser Goroutines en langage Go pour les transactions financières à forte concurrence Avec le développement de la technologie financière, les exigences en matière de transactions financières sont de plus en plus élevées, en particulier dans les situations à forte concurrence. Afin de répondre à de tels besoins, la fonctionnalité Goroutines du langage Go est devenue un choix idéal. Cet article présentera comment utiliser Goroutines pour mettre en œuvre des transactions financières hautement concurrentes et l'expliquera en détail à travers des exemples de code. 1. Introduction à Goroutines Goroutines est une version allégée du langage Go

Pourquoi Golang est-il adapté au développement de l'IA ? Pourquoi Golang est-il adapté au développement de l'IA ? Sep 08, 2023 pm 01:54 PM

Pourquoi Golang est-il adapté au développement de l’IA ? Avec le développement rapide de la technologie de l’intelligence artificielle (IA), de plus en plus de développeurs et de chercheurs ont commencé à s’intéresser au potentiel de l’utilisation du langage de programmation Golang dans le domaine de l’IA. Golang (également connu sous le nom de Go) est un langage de programmation open source développé par Google. Il est apprécié des développeurs pour ses hautes performances, sa haute concurrence, sa simplicité et sa facilité d'utilisation. Cet article explorera pourquoi Golang est adapté au développement de l'IA et fournira des exemples de code pour démontrer les avantages de Golang dans le domaine de l'IA. Sexe élevé

Développement Golang : créer un système de stockage de fichiers distribué Développement Golang : créer un système de stockage de fichiers distribué Sep 22, 2023 am 08:00 AM

Développement Golang : création d'un système de stockage de fichiers distribué Ces dernières années, avec le développement rapide du cloud computing et du big data, la demande de stockage de données a continué d'augmenter. Afin de faire face à cette tendance, les systèmes de stockage de fichiers distribués sont devenus une direction technique importante. Cet article explique comment créer un système de stockage de fichiers distribué à l'aide du langage de programmation Golang et fournit des exemples de code spécifiques. 1. Conception d'un système de stockage de fichiers distribué Un système de stockage de fichiers distribué est un système qui stocke les données de fichiers de manière dispersée sur plusieurs machines. Il divise les données en plusieurs blocs.

Comment implémenter un traitement audio à haute concurrence via Goroutines Comment implémenter un traitement audio à haute concurrence via Goroutines Jul 24, 2023 pm 10:34 PM

Comment réaliser un traitement audio à haute simultanéité via Goroutines À mesure que la demande de traitement audio augmente, la manière d'obtenir un traitement audio efficace est devenue la priorité de nombreux développeurs. En tant que fonctionnalité du langage Go, Goroutine fournit un modèle de concurrence simple et puissant qui peut nous aider à réaliser un traitement audio à haute concurrence. Cet article explique comment utiliser Goroutines pour implémenter un traitement audio à haute concurrence et fournit des exemples de code. 1. Introduction à Goroutine Goroutine est le langage Go

Conseils et pièges pour l'utilisation des chaînes Golang Conseils et pièges pour l'utilisation des chaînes Golang Aug 09, 2023 pm 06:45 PM

Conseils et pièges pour l'utilisation de GolangChannels Introduction : Golang est un langage de développement très populaire. Son modèle de concurrence et le concept de canaux permettent aux développeurs de traiter facilement des tâches simultanément. Cet article discutera des conseils d'utilisation et de certains pièges courants de GolangChannels pour aider les lecteurs à écrire un code plus robuste et plus maintenable. 1. Le concept de base des canaux Dans Golang, les canaux sont utilisés dans

See all articles