Maison >développement back-end >Golang >Maîtriser les compétences de programmation simultanée Select Channels Go en golang

Maîtriser les compétences de programmation simultanée Select Channels Go en golang

王林
王林original
2023-09-27 09:49:071246parcourir

掌握golang中Select Channels Go并发式编程的技巧

Pour maîtriser les compétences de programmation simultanée Select Channels Go dans Golang, des exemples de code spécifiques sont nécessaires

Avec l'amélioration continue des performances des ordinateurs, de plus en plus d'applications commencent à adopter la programmation simultanée pour obtenir un fonctionnement plus efficace. En tant que langage prenant en charge la programmation simultanée, le langage Go fournit une multitude d'outils et de mécanismes de programmation simultanée. Parmi eux, l'instruction Select et le canal (Channel) sont des composants importants de la programmation simultanée en langage Go. Cet article explique comment utiliser les instructions et les canaux Select pour implémenter la programmation simultanée en langage Go et donne des exemples de code spécifiques.

Dans le langage Go, un canal est une structure de données utilisée pour transférer des données entre Goroutines. Grâce aux canaux, nous pouvons transférer et partager des données entre différentes coroutines pour réaliser une programmation simultanée. L'instruction Select est une structure utilisée pour sélectionner les opérations de canal et peut gérer des opérations sur plusieurs canaux.

Voici un exemple simple qui montre comment implémenter une programmation simultanée simple à l'aide de canaux et d'instructions Select :

package main

import "fmt"

func main() {
    ch1 := make(chan int)
    ch2 := make(chan string)

    go func() {
        for {
            ch1 <- 42
        }
    }()

    go func() {
        for {
            ch2 <- "Hello, world!"
        }
    }()

    for {
        select {
        case <-ch1:
            fmt.Println("Received an integer from ch1")
        case <-ch2:
            fmt.Println("Received a string from ch2")
        }
    }
}

Dans cet exemple, nous créons deux canaux ch1 et ch2 , envoyer des entiers et des chaînes au canal via deux coroutines anonymes. Ensuite, dans la coroutine principale, nous utilisons l'instruction Select pour sélectionner les opérations des différents canaux. Lorsque les données sont reçues du canal, les opérations correspondantes seront effectuées. ch1ch2,通过两个匿名协程分别向通道发送整数和字符串。然后,在主协程中,我们使用Select语句选择不同通道的操作,当有数据从通道中接收时,就会执行相应的操作。

通过运行上面的代码,我们可以看到每次从通道中接收到数据时,对应的操作会被执行。这就是并发编程的魅力之一,通过并发的执行多个任务,我们可以实现更高效的运行。

除了基本的通道操作外,Select语句还可以与超时机制结合使用,以避免程序出现死锁的情况。下面是一个使用Select语句和超时机制的示例:

package main

import (
    "fmt"
    "time"
)

func main() {
    ch := make(chan int)
    timeout := make(chan bool)

    go func() {
        time.Sleep(2 * time.Second)
        timeout <- true
    }()

    go func() {
        time.Sleep(1 * time.Second)
        ch <- 42
    }()

    select {
    case <-ch:
        fmt.Println("Received data from ch")
    case <-timeout:
        fmt.Println("Timeout")
    }
}

在这个例子中,我们创建了一个通道ch和一个超时通道timeout。通过两个匿名协程,在不同的时间点向通道发送数据和超时信号。然后,在主协程中,通过Select语句选择不同通道的操作,当2秒钟内没有从通道ch中接收到数据时,就会执行超时操作。

通过运行上述代码,我们可以观察到如果在1秒钟内从通道ch

En exécutant le code ci-dessus, nous pouvons voir qu'à chaque fois que des données sont reçues du canal, l'opération correspondante sera exécutée. C'est l'un des charmes de la programmation simultanée. En exécutant plusieurs tâches simultanément, nous pouvons obtenir un fonctionnement plus efficace.

En plus des opérations de base du canal, l'instruction Select peut également être utilisée en conjonction avec le mécanisme de délai d'attente pour éviter les blocages dans le programme. Voici un exemple utilisant l'instruction Select et le mécanisme de timeout : 🎜rrreee🎜 Dans cet exemple, nous créons un canal ch et un canal de timeout timeout. Grâce à deux coroutines anonymes, les données et les signaux d'expiration sont envoyés au canal à différents moments. Ensuite, dans la coroutine principale, sélectionnez les opérations des différents canaux via l'instruction Select. Lorsqu'aucune donnée n'est reçue du canal ch dans les 2 secondes, une opération de délai d'attente sera effectuée. 🎜🎜En exécutant le code ci-dessus, nous pouvons observer que si des données sont reçues du canal ch dans un délai d'une seconde, l'opération de réception de données sera effectuée si aucune donnée n'est reçue pendant plus de 2 secondes, Ensuite, une opération de temporisation sera effectuée. 🎜🎜Grâce aux exemples ci-dessus, nous pouvons dans un premier temps comprendre que l'utilisation d'instructions et de canaux Select peut réaliser une programmation simultanée en langage Go. Dans le développement réel, de nombreuses autres techniques et précautions doivent être maîtrisées, telles que l'utilisation de canaux mis en mémoire tampon pour réduire la surcharge de synchronisation entre les coroutines, l'utilisation de pools de travail pour contrôler le nombre de simultanéités, etc. J'espère que cet article pourra vous fournir de l'aide, afin que vous puissiez maîtriser les compétences de programmation simultanée Select Channels Go dans Golang et pouvoir mieux l'appliquer au développement réel. 🎜

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