Memahami Peranan masa.sleep in Goroutine Execution
Dalam Go, goroutine ringan secara serentak melaksanakan utas. Semasa menggabungkan goroutine dengan komunikasi saluran menyediakan primitif konkurensi yang mantap, senario tertentu memerlukan penggunaan fungsi menyekat seperti time.sleep untuk mengelakkan kebuluran dan memastikan keadilan dalam pelaksanaan.
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, kod ini mencetak "hello" dan "dunia" secara bergantian pada skrin lima kali. Walau bagaimanapun, jika time.Sleep diulas, hanya "hello" akan dicetak. Tingkah laku ini menyerlahkan kepentingan masa. Tidur dalam pelaksanaan goroutine.
Penjadual masa jalan Go bukan preemptif. Ini bermakna gorouti mesti secara sukarela melepaskan kawalan untuk membolehkan gorouti lain dilaksanakan. Satu cara untuk melepaskan kawalan ialah menggunakan masa.Sleep.
Dalam coretan kod di atas, jika masa.Sleep dialih keluar, goroutine "hello" akan berjalan selama lima lelaran tanpa memberi sebarang peluang kepada goroutine "dunia" untuk melaksanakan. Akibatnya, apabila goroutine "hello" tamat, program ini ditamatkan kerana ketiadaan sebarang goroutine lain yang mengekalkannya.
Oleh itu, masa.Tidur memainkan peranan penting dalam memastikan keadilan dalam penjadualan goroutine. Dengan memperkenalkan kelewatan singkat ke dalam pelaksanaan goroutin tertentu, ia membolehkan goroutin lain dilaksanakan dan menghalang kebuluran atau kebuluran lengkap gorouti lain.
Atas ialah kandungan terperinci Bagaimanakah `time.Sleep()` Menghalang Kebuluran Goroutine dalam Pergi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!