Dalam versi Go yang lebih awal, kod di bawah menunjukkan tingkah laku yang tidak dijangka apabila runtime.Gosched() ialah dialih keluar:
package main import ( "fmt" "runtime" ) func say(s string) { for i := 0; i < 5; i++ { runtime.Gosched() fmt.Println(s) } } func main() { go say("world") say("hello") }
Output dengan runtime.Gosched():
hello world hello world hello world hello world hello
Output tanpa runtime.Gosched():
hello hello hello hello hello
Apabila Go dijalankan tanpa menyatakan pembolehubah persekitaran GOMAXPROCS, semua goroutine dijadualkan untuk pelaksanaan dalam satu utas OS. Untuk menjadikan atur cara kelihatan berbilang benang, penjadual Go mesti sekali-sekala menukar konteks pelaksanaan.
Berbilang Tugas Koperasi:
Go menggunakan model berbilang tugas kooperatif, bermakna gorouti mesti secara eksplisit menghasilkan kawalan kepada goroutine lain. Ini berbeza dengan berbilang tugas awalan dalam urutan OS, di mana penjadual menukar konteks pelaksanaan secara telus.
Fungsi masa jalan.Gosched():
Jika tiada tugasan berbilang preemptif , runtime.Gosched() membenarkan goroutine menghasilkan kawalan kepada penjadual. Apabila goroutine mencapai panggilan Gosched, penjadual mengarahkannya untuk menukar pelaksanaan kepada goroutine lain.
Dalam contoh yang disediakan, mengalih keluar Gosched bermakna konteks pelaksanaan tidak pernah meninggalkan rutin utama. Akibatnya, goroutine "dunia" tidak dibenarkan dijalankan dan tiada mesej "dunia" dicetak.
Menetapkan GOMAXPROCS kepada nombor positif ( cth., runtime.GOMAXPROCS(2)) membenarkan Go mencipta sehingga bilangan urutan asli itu. Jika GOMAXPROCS lebih besar daripada 1, goroutin boleh dijadualkan untuk dijalankan dalam urutan yang berbeza, yang membawa kepada keselarian sebenar.
Dengan GOMAXPROCS ditetapkan kepada 2 atau ke atas, goroutin dalam contoh akan disilang, walaupun tanpa masa jalan.Gosched (), menunjukkan berbilang tugas awalan.
Atas ialah kandungan terperinci Mengapakah `runtime.Gosched()` Penting untuk Mengantara Output Goroutine dalam Program Go Berjalur Tunggal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!