Rumah >pembangunan bahagian belakang >Golang >Fahami perbezaan penting antara concurrency dan paralelisme dalam bahasa Go
Apabila mempelajari pengaturcaraan serentak, anda sering mendengar dua konsep: Concurrency dan Parallelism. Walaupun kedua-dua istilah ini kadangkala digunakan secara bergantian, ia sebenarnya mewakili dua konsep yang berbeza. Dalam bahasa Go, memahami perbezaan penting antara concurrency dan parallelism adalah penting untuk menulis program serentak yang cekap dan boleh dipercayai.
Pertama, mari kita fahami konsep konkurensi. Concurrency merujuk kepada cara pengaturcaraan yang membolehkan berbilang tugasan dilaksanakan pada masa yang sama, tetapi tidak semestinya pada masa yang sama. Dalam model concurrency, tugasan boleh dilaksanakan secara bergilir-gilir, dan kesan pelaksanaan "serentak" dicapai dengan menukar konteks. Dalam bahasa Go, anda boleh menggunakan goroutine untuk mencapai concurrency Setiap goroutine mewakili tugasan yang dilaksanakan serentak.
Berikut ialah contoh mudah yang menunjukkan cara menggunakan goroutine untuk mencapai konkurensi:
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) }
Dalam contoh di atas, kami mentakrifkan fungsi printNumbers
untuk mencetak nombor dari 1 hingga 5. Dalam fungsi main
, dua gorout printNumbers
dimulakan melalui kata kunci go
supaya ia boleh dilaksanakan secara serentak. Gunakan fungsi time.Sleep
untuk menunggu masa yang mencukupi bagi memastikan goroutine mempunyai masa yang mencukupi untuk dilaksanakan. 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
dalam pakej runtime
untuk menetapkan tahap selari dan menentukan bilangan goroutine yang boleh dilaksanakan secara serentak. Berikut ialah contoh penggunaan selari: 🎜rrreee🎜Dalam contoh di atas, kami menggunakan sync.WaitGroup
untuk menunggu semua goroutine menyelesaikan pelaksanaan. Tetapkan selari kepada 2 melalui runtime.GOMAXPROCS
supaya dua goroutine boleh dilaksanakan pada masa yang sama. Dalam aplikasi praktikal, kelebihan prestasi yang dibawa oleh pemproses berbilang teras boleh digunakan sepenuhnya dengan menetapkan keselarian secara munasabah mengikut bilangan teras mesin dan ciri-ciri tugas. 🎜🎜Melalui contoh di atas, kita dapat melihat aplikasi konkurensi dan selari dalam bahasa Go. Concurrency ialah paradigma pengaturcaraan yang membolehkan pelbagai tugasan dilaksanakan secara bergilir-gilir menggunakan pemproses berbilang teras untuk melaksanakan berbilang tugas pada masa yang sama untuk meningkatkan prestasi program. Untuk menulis program serentak yang cekap dan boleh dipercayai, adalah penting untuk memahami perbezaan penting antara konkurensi dan selari. Saya harap contoh di atas dapat membantu anda memahami dengan lebih baik konsep konkurensi dan selari dalam bahasa Go. 🎜Atas ialah kandungan terperinci Fahami perbezaan penting antara concurrency dan paralelisme dalam bahasa Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!