Kepentingan masa.tidur dalam Mengekalkan Pelaksanaan Goroutine
Dalam bidang pengaturcaraan Go, goroutine menawarkan mekanisme yang berkuasa untuk pelaksanaan serentak. Walau bagaimanapun, persoalan timbul apabila gorout tertentu gagal dijalankan seperti yang dimaksudkan apabila time.sleep dikecualikan.
Kod dan Pemerhatian
Pertimbangkan coretan kod berikut daripada tutorial Go :
package main import ( "fmt" "time" ) func say(s string) { for i := 0; i < 5; i++ { time.Sleep(100 * time.Millisecond) fmt.Println(s) } } func main() { go say("world") say("hello") }
Apabila dilaksanakan dengan time.sleep, kod ini menghasilkan yang diharapkan output, di mana "dunia" dan "hello" ditulis pada skrin secara bergantian lima kali. Walau bagaimanapun, mengulas masa.tidur membawa kepada hasil yang tidak dijangka - hanya "hello" dicetak lima kali.
Peranan masa.sleep
Peranan penting bagi masa.tidur terletak dalam menyediakan peluang untuk goroutine untuk melaksanakan. Tanpa tidur, penjadual goroutine kekal tidak aktif, menghalang goroutine sebut("dunia") daripada mendapat kawalan.
Sifat Bukan Preemptif Penjadualan Goroutine
Tidak seperti kebanyakan sistem pengendalian berbilang tugas, penjadual goroutine Go bukan preemptif. Ini bermakna bahawa goroutine tidak akan diganggu dan menghasilkan kawalan melainkan mereka secara jelas memintanya.
Keperluan untuk Kawalan Hasil
Jika tiada masa.sleep, yang utama goroutine memonopoli kawalan dan berjalan lima kali tanpa melepaskannya. Sebaik sahaja ia selesai, program ini ditamatkan kerana tiada goroutine aktif untuk mengekalkannya.
Kesimpulan
Pemasukan masa.tidur memastikan bahawa goroutine sekunder tidak kelaparan peluang pelaksanaan. Ia membenarkan penjadual menukar kawalan antara goroutine, menghasilkan tingkah laku serentak yang dimaksudkan. Oleh itu, memahami peranan time.sleep dalam mengekalkan pelaksanaan goroutine adalah penting untuk memanfaatkan potensi penuh ciri serentak Go.
Atas ialah kandungan terperinci Mengapakah `masa.Tidur` Penting untuk Pelaksanaan Goroutine Serentak dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!