Maison >développement back-end >Golang >Outil de programmation asynchrone Golang : compréhension approfondie du fonctionnement des Goroutines

Outil de programmation asynchrone Golang : compréhension approfondie du fonctionnement des Goroutines

WBOY
WBOYoriginal
2023-07-18 13:49:071256parcourir

Outil de programmation asynchrone Golang : Compréhension approfondie du principe de fonctionnement des Goroutines

Introduction :
À l'ère actuelle de l'Internet à haute concurrence, la programmation asynchrone est devenue un moyen technique indispensable. En tant que langage conçu pour une concurrence élevée et une grande évolutivité, le langage Go est livré avec un modèle de concurrence puissant, à savoir Goroutines. Cet article examinera en profondeur le fonctionnement des Goroutines et illustrera leurs puissantes capacités de programmation asynchrone avec quelques exemples de code.

1. Que sont les Goroutines ? Les Goroutines sont des threads légers dans le langage Go. Ils peuvent être considérés comme une méthode d'exécution simultanée de fonctions ou de méthodes. Une Goroutine peut être créée dans un programme grâce aux mots-clés intégrés
du langage Go. Lorsque vous créez des Goroutines, le langage Go se charge de planifier et de gérer automatiquement leur exécution. go

2. Comment fonctionnent les Goroutines

Les Goroutines réalisent une exécution simultanée grâce à une méthode appelée planification coopérative (Cooperative Scheduling). Dans le modèle de thread traditionnel, le temps d'exécution des threads est planifié par le système d'exploitation. Dans Goroutines, le runtime du langage Go est responsable de la planification de l'exécution des Goroutines.

Lorsqu'un Goroutine est créé, il sera placé dans un planificateur Goroutine (Goroutine Scheduler) en attente d'être planifié pour son exécution. Lorsqu'un Goroutine est planifié pour l'exécution, le moteur d'exécution du langage Go alloue un thread pour exécuter le Goroutine. Si ce Goroutine rencontre un blocage lors de l'exécution (par exemple, en attendant la fin des E/S), le langage Go recyclera le thread exécutant actuellement ce Goroutine, puis utilisera un autre thread inactif pour exécuter d'autres Goroutines. Lorsque le blocage est libéré, la Goroutine sera remise dans le planificateur pour attendre l'exécution de la planification. Cette méthode de planification collaborative peut utiliser pleinement les ressources informatiques et éviter les surcharges liées aux commutations fréquentes entre plusieurs threads.

3. Exemple d'explication

Ce qui suit utilise plusieurs exemples pour illustrer les puissantes capacités de programmation asynchrone de Goroutines.

    Exécuter plusieurs tâches simultanément
  1. package main
    
    import (
        "fmt"
        "time"
    )
    
    func doTask(id int) {
        time.Sleep(time.Second) // 模拟执行耗时任务
        fmt.Println("Task", id, "done")
    }
    
    func main() {
        for i := 0; i < 10; i++ {
            go doTask(i) // 创建一个Goroutine并调度执行任务
        }
    
        time.Sleep(5 * time.Second) // 等待5秒,确保所有任务都执行完毕
        fmt.Println("All tasks done")
    }
L'exécution du code ci-dessus produira des résultats similaires à ce qui suit :

Task 0 done
Task 1 done
Task 2 done
Task 3 done
Task 4 done
Task 5 done
Task 6 done
Task 7 done
Task 8 done
Task 9 done
All tasks done

Comme vous pouvez le voir, les 10 tâches sont exécutées simultanément au lieu de séquentiellement.

    Utilisez des canaux pour la communication entre les Goroutines
  1. package main
    
    import "fmt"
    
    func sendMsg(ch chan string, msg string) {
        ch <- msg // 向通道发送消息
    }
    
    func main() {
        ch := make(chan string) // 创建一个字符串通道
    
        go sendMsg(ch, "Hello")
        go sendMsg(ch, "World")
    
        msg1 := <-ch // 从通道接收消息
        msg2 := <-ch
    
        fmt.Println(msg1, msg2) // 输出 "Hello World"
    }
L'exemple ci-dessus montre le transfert de données entre les Goroutines via des canaux. En utilisant des canaux, nous pouvons réaliser une collaboration et une communication entre plusieurs Goroutines s'exécutant simultanément.

Conclusion :

Avec une compréhension approfondie du fonctionnement des Goroutines, nous pouvons réaliser tout le potentiel de la programmation asynchrone dans Golang. En utilisant rationnellement Goroutines, nous pouvons mieux utiliser les ressources informatiques et améliorer les performances de concurrence du système. Dans le même temps, les Goroutines fournissent un modèle de programmation concurrente puissant. En communiquant entre les Goroutines via des canaux, nous pouvons créer des programmes de programmation asynchrone plus robustes et plus efficaces.

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