Apabila menjalankan kod di taman permainan Go, pembangun mungkin menghadapi percanggahan berbanding menjalankan kod yang sama pada mesin tempatan mereka. Artikel ini meneroka perbezaan tingkah laku, terutamanya apabila berurusan dengan goroutin dan mekanisme penyegerakan.
Pertimbangkan kod Go berikut:
<code class="go">package main import ( "fmt" ) func other(done chan bool) { done <- true go func() { for { fmt.Println("Here") } }() } func main() { fmt.Println("Hello, playground") done := make(chan bool) go other(done) <-done fmt.Println("Finished.") }
Taman permainan On the Go, kod ini menghasilkan ralat: "Proses mengambil masa terlalu lama." Ini menunjukkan bahawa goroutine yang dibuat dalam fungsi lain berjalan selama-lamanya.
Walau bagaimanapun, menjalankan kod yang sama pada mesin tempatan dengan berbilang teras CPU (GOMAXPROCS > 1) menghasilkan output berikut:
<code class="text">Hello, playground Finished.</code>
Ini menunjukkan bahawa goroutine yang dicipta dalam yang lain ditamatkan apabila goroutine utama selesai.
Gelagat yang berbeza antara taman permainan Go dan mesin tempatan boleh dikaitkan dengan bilangan pemproses yang tersedia. Di taman permainan Go, GOMAXPROCS lalai kepada 1, bermakna hanya satu goroutine boleh dijalankan pada satu masa. Oleh itu, dalam contoh di atas, goroutine tidak berkesudahan yang dicipta dalam yang lain menghalang goroutine utama daripada diteruskan.
Sebaliknya, apabila berjalan secara setempat dengan berbilang teras CPU, GOMAXPROCS lalai kepada bilangan teras yang tersedia, membenarkan berbilang goroutin untuk berjalan serentak. Oleh itu, goroutine tidak berkesudahan yang dicipta dalam yang lain tidak menghalang goroutine utama daripada keluar.
Gelagat goroutine dalam Go bergantung pada bilangan pemproses yang tersedia (GOMAXPROCS). Walaupun taman permainan Go menggunakan nilai lalai 1 yang boleh membawa kepada persepsi goroutine berjalan selama-lamanya, menjalankan kod yang sama pada mesin tempatan dengan berbilang teras memberikan gelagat berbeza di mana goroutine mungkin ditamatkan apabila goroutine utama selesai. Pemahaman ini membantu pembangun mengelakkan salah faham dan memastikan kod mereka berkelakuan seperti yang diharapkan dalam persekitaran yang berbeza.
Atas ialah kandungan terperinci Mengapa Goroutines on Go Playground dan Mesin Tempatan Mempamerkan Perbezaan Tingkah Laku?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!