Bahasa Go ialah bahasa pengaturcaraan yang dibangunkan oleh Google dan terkenal dengan ciri pengaturcaraan serentaknya. Dalam bahasa Go, terdapat dua konsep penting - concurrency dan parallelism. Walaupun kedua-dua konsep kelihatan serupa, terdapat perbezaan dan hubungan yang halus di antara mereka. Artikel ini akan meneroka perbezaan antara concurrency dan paralelisme dalam bahasa Go dan menerangkan sambungannya melalui contoh kod tertentu.
Pertama, mari kita fahami konsep konkurensi dan selari. Concurrency merujuk kepada kewujudan berbilang unit pelaksanaan bebas dalam sistem ini bertindih dalam masa, tetapi hanya terdapat satu pelaksanaan pada bila-bila masa. Dalam erti kata lain, concurrency merujuk kepada keadaan sistem dengan pelbagai aktiviti aktif pada masa yang sama. Paralelisme merujuk kepada kewujudan serentak beberapa unit pelaksanaan bebas dalam sistem, dan unit pelaksanaan ini sebenarnya berjalan serentak pada berbilang pemproses. Dalam kes selari, pelbagai tugas boleh dilaksanakan secara serentak, meningkatkan prestasi keseluruhan program.
Dalam bahasa Go, kita boleh mencapai keselarasan melalui goroutine. Goroutine ialah benang ringan yang diuruskan oleh persekitaran masa jalan bahasa Go dan boleh dibuat dengan mudah dalam program. Berikut ialah contoh kod ringkas yang menunjukkan cara menggunakan goroutine untuk melaksanakan tugas secara serentak:
package main import ( "fmt" "time" ) func task() { for i := 0; i < 5; i++ { fmt.Println("Executing task ", i) time.Sleep(time.Second) } } func main() { go task() time.Sleep(3 * time.Second) fmt.Println("Main goroutine exits") }
Dalam kod di atas, kami mentakrifkan fungsi task
yang akan mengeluarkan satu siri nombor, dan Ia akan tidur selama 1 saat selepas setiap output. Dalam fungsi main
, kami memulakan goroutine baharu melalui go task()
untuk melaksanakan fungsi task
. Dengan cara ini, fungsi task
akan dilaksanakan serentak dalam goroutine yang berasingan, manakala goroutine utama akan terus melaksanakan kod berikutnya. Dengan cara ini, kami mencapai kesan melaksanakan tugas secara serentak. task
函数,该函数会输出一系列数字,并且每次输出后会休眠1秒。在main
函数中,我们通过go task()
的方式启动了一个新的goroutine来执行task
函数。这样,task
函数会在一个单独的goroutine中并发执行,而主goroutine则会继续执行后续的代码。通过这种方式,我们实现了并发执行任务的效果。
接下来,我们再看一个示例代码,展示了如何使用Go语言的并行特性来提高程序的执行效率:
package main import ( "fmt" "runtime" "sync" ) func parallelTask(wg *sync.WaitGroup, id int) { defer wg.Done() fmt.Println("Executing parallel task ", id) } func main() { numCPU := runtime.NumCPU() runtime.GOMAXPROCS(numCPU) var wg sync.WaitGroup for i := 0; i < numCPU; i++ { wg.Add(1) go parallelTask(&wg, i) } wg.Wait() fmt.Println("All parallel tasks have completed") }
在上面的代码中,我们使用了sync.WaitGroup
来等待所有并行任务的完成。通过设置runtime.GOMAXPROCS(numCPU)
,我们确保程序会使用所有的CPU核心来并行执行parallelTask
函数。在main
函数中,我们创建了与CPU核心数相同数量的goroutine,并发执行parallelTask
函数。最后,通过wg.Wait()
rrreee
Dalam kod di atas, kami menggunakansync.WaitGroup
untuk menunggu semua tugasan selari selesai. Dengan menetapkan runtime.GOMAXPROCS(numCPU)
, kami memastikan program ini akan menggunakan semua teras CPU untuk melaksanakan fungsi parallelTask
secara selari. Dalam fungsi utama
, kami mencipta bilangan goroutin yang sama dengan bilangan teras CPU dan melaksanakan fungsi parallelTask
secara serentak. Akhir sekali, tunggu sehingga semua goroutine selesai melalui wg.Wait()
. Dengan cara ini, kami mencapai kesan melaksanakan tugas secara selari dan meningkatkan kecekapan pelaksanaan program. 🎜🎜Ringkasnya, keselarasan dan keselarian bahasa Go adalah salah satu ciri uniknya Melalui mekanisme pelaksanaan goroutine dan selari, pengaturcaraan serentak dan selari boleh direalisasikan dengan mudah. Walaupun terdapat perbezaan halus antara concurrency dan parallelism, dalam pengaturcaraan sebenar ia sering digunakan bersama-sama antara satu sama lain untuk meningkatkan prestasi program. Saya berharap melalui perbincangan dan contoh kod dalam artikel ini, pembaca dapat memahami dengan lebih jelas kaitan dan perbezaan antara concurrency dan paralelisme dalam bahasa Go. 🎜Atas ialah kandungan terperinci Bincangkan perbezaan dan perkaitan antara konkurensi dan selari dalam bahasa Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!