Explication détaillée et exemples du modèle de concurrence Goroutines de Golang
Dans le domaine du développement logiciel actuel, la programmation simultanée est de plus en plus devenue une technologie indispensable. Le modèle de thread traditionnel est souvent confronté à une série de problèmes, tels qu'une surcharge élevée de commutation de thread, la sécurité des threads de données partagées, etc. Pour résoudre ces problèmes, Golang introduit un modèle de concurrence appelé Goroutines. Cet article présentera en détail le modèle de concurrence Goroutines de Golang et donnera quelques exemples de code pratiques.
Que sont les Goroutines ?
Les goroutines sont l'unité de base de l'exécution simultanée dans Golang. Elles peuvent être considérées comme un thread léger. Chaque Goroutine peut s'exécuter indépendamment, possède sa propre pile et sa propre séquence d'instructions et est créée à l'aide de mots-clés Go. Par rapport aux threads traditionnels, les frais généraux liés à la création et à la destruction des Goroutines sont beaucoup plus faibles, et le basculement entre les Goroutines est également plus efficace.
Exemple 1 : Exemple simple de Goroutine
Voici un exemple simple de Goroutine qui montre comment utiliser Goroutines pour effectuer des tâches simultanément :
package main import ( "fmt" "time" ) func printNumbers() { for i := 0; i < 5; i++ { fmt.Println(i) } } func printLetters() { for i := 'a'; i < 'e'; i++ { fmt.Printf("%c ", i) } } func main() { go printNumbers() go printLetters() // 主Goroutine等待一定时间,以便其他Goroutine有机会执行 time.Sleep(2 * time.Second) }
Dans l'exemple ci-dessus, nous avons défini deux fonctions printNumbers</code > et <code> printLetters
, qui sont utilisés pour imprimer respectivement des chiffres et des lettres. Dans la fonction main
, nous utilisons le mot-clé go
pour démarrer deux Goroutines indépendantes afin d'exécuter ces deux fonctions simultanément. Dans le même temps, afin de garantir que les autres Goroutines aient suffisamment de temps pour s'exécuter, nous appelons time.Sleep
dans la Goroutine principale. printNumbers
和printLetters
,它们分别用于打印数字和字母。在main
函数中,我们通过go
关键字来启动两个独立的Goroutines并发地执行这两个函数。同时,为了确保其他Goroutines有足够的时间执行,我们在主Goroutine中调用了time.Sleep
。
示例2:使用通道实现Goroutine间的通信
除了并发执行任务,Goroutines还可以通过通道进行安全地传递数据,从而实现多个Goroutines之间的通信。下面是一个使用通道的示例代码:
package main import "fmt" func produce(c chan<- int) { for i := 0; i < 5; i++ { c <- i } close(c) } func consume(c <-chan int) { for num := range c { fmt.Println(num) } } func main() { ch := make(chan int) go produce(ch) consume(ch) }
在上述示例中,我们定义了两个函数produce
和consume
,分别用于生产和消费数据。在main
函数中,我们创建了一个通道ch
,并通过go
关键字并发地执行produce
函数和consume
函数。produce
函数通过c <- i
将数据发送到通道中,而consume
函数通过num := range c
从通道中接收数据。在produce
函数的末尾,我们调用了close(c)
来关闭通道,以便consume
En plus d'exécuter des tâches simultanément, les Goroutines peuvent également transférer des données en toute sécurité via des canaux pour établir une communication entre plusieurs Goroutines. Voici un exemple de code utilisant des canaux :
rrreee
produce
et consume
pour produire et consommer des données respectivement. Dans la fonction main
, nous créons un canal ch
et exécutons la fonction produce
simultanément via le mot-clé go
et le Fonction consommer
. La fonction produce
envoie des données au canal via c <- i
, tandis que la fonction consume
transmet num := range c code>Recevoir les données du canal. A la fin de la fonction <code>produce
, nous appelons close(c)
pour fermer le canal afin que la fonction consume
se termine après avoir lu toutes les données . 🎜🎜Résumé🎜Cet article présente le modèle de concurrence Goroutines de Golang et donne des exemples de code pratiques. Les Goroutines sont des threads légers créés via des mots-clés Go et disposent de piles et de séquences d'instructions indépendantes. Grâce à un exemple de code, nous montrons comment utiliser Goroutines pour exécuter des tâches simultanément et mettre en œuvre une communication sécurisée entre Goroutines via des canaux. En utilisant correctement Goroutines, la programmation simultanée peut effectuer diverses tâches plus efficacement. Essayez d'exécuter l'exemple de code ci-dessus pour mieux comprendre la puissance des Goroutines ! 🎜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!