Maison >développement back-end >Golang >Comprendre les différences essentielles entre la concurrence et le parallélisme en langage Go
Lorsque vous apprenez la programmation concurrente, vous entendez souvent deux concepts : la concurrence et le parallélisme. Bien que ces deux termes soient parfois utilisés de manière interchangeable, ils représentent en réalité deux concepts différents. Dans le langage Go, comprendre les différences essentielles entre la concurrence et le parallélisme est crucial pour écrire des programmes concurrents efficaces et fiables.
Tout d’abord, comprenons le concept de concurrence. La concurrence fait référence à une méthode de programmation qui permet d'exécuter plusieurs tâches en même temps, mais pas nécessairement en même temps. Dans le modèle de concurrence, les tâches peuvent être exécutées alternativement et l'effet d'exécution « simultanée » est obtenu en changeant de contexte. En langage Go, vous pouvez utiliser la goroutine pour obtenir la simultanéité. Chaque goroutine représente une tâche exécutée simultanément.
Ce qui suit est un exemple simple qui montre comment utiliser goroutine pour obtenir la simultanéité :
package main import ( "fmt" "time" ) func printNumbers() { for i := 1; i <= 5; i++ { fmt.Println(i) time.Sleep(1 * time.Second) } } func main() { go printNumbers() go printNumbers() time.Sleep(6 * time.Second) }
Dans l'exemple ci-dessus, nous définissons une fonction printNumbers
pour imprimer les nombres de 1 à 5. Dans la fonction main
, deux goroutines printNumbers
sont démarrées via le mot-clé go
afin qu'elles puissent être exécutées simultanément. Utilisez la fonction time.Sleep
pour attendre suffisamment de temps pour vous assurer que la goroutine a suffisamment de temps pour s'exécuter. printNumbers
函数,用于打印1到5的数字。在main
函数中,通过go
关键字启动了两个printNumbers
的goroutine,这样它们就可以并发地执行。通过time.Sleep
函数来等待足够的时间,确保goroutine有足够的时间来执行。
接着,我们来看一下并行(Parallelism)的概念。并行是指多个任务真正同时执行,且可以利用多核处理器的特性来提高性能。在Go语言中,可以使用runtime
包中的GOMAXPROCS
来设置并行度,指定可以同时执行的goroutine数量。
下面是一个使用并行的例子:
package main import ( "fmt" "runtime" "sync" ) func printNumbers(wg *sync.WaitGroup) { defer wg.Done() for i := 1; i <= 5; i++ { fmt.Println(i) } } func main() { runtime.GOMAXPROCS(2) // 设置并行度为2 var wg sync.WaitGroup wg.Add(2) go printNumbers(&wg) go printNumbers(&wg) wg.Wait() }
在上面的例子中,我们使用sync.WaitGroup
来等待所有的goroutine执行完毕。通过runtime.GOMAXPROCS
GOMAXPROCS
dans le package runtime
pour définir le degré de parallélisme et spécifier le nombre de goroutines pouvant être exécutées simultanément. Ce qui suit est un exemple d'utilisation du parallélisme : 🎜rrreee🎜Dans l'exemple ci-dessus, nous utilisons sync.WaitGroup
pour attendre que toutes les goroutines terminent leur exécution. Définissez le parallélisme sur 2 via runtime.GOMAXPROCS
afin que deux goroutines puissent être exécutées en même temps. Dans les applications pratiques, les avantages en termes de performances apportés par les processeurs multicœurs peuvent être pleinement exploités en définissant le parallélisme de manière raisonnable en fonction du nombre de cœurs de la machine et des caractéristiques de la tâche. 🎜🎜À travers les exemples ci-dessus, nous pouvons voir l'application de la concurrence et du parallélisme dans le langage Go. La concurrence est un paradigme de programmation qui permet d'exécuter plusieurs tâches en alternance ; le parallélisme utilise des processeurs multicœurs pour exécuter plusieurs tâches en même temps afin d'améliorer les performances du programme. Pour écrire des programmes concurrents efficaces et fiables, il est important de comprendre les différences essentielles entre la concurrence et le parallélisme. J'espère que les exemples ci-dessus pourront vous aider à mieux comprendre les concepts de concurrence et de parallélisme dans le langage Go. 🎜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!