Apabila Go Scheduler Mencipta M dan P Baharu
Dalam masa jalan Go, goroutine, urutan sistem pengendalian (benang OS) dan konteks/ pemproses (M dan P) bekerjasama untuk menguruskan concurrency. Memahami apabila entiti M dan P baharu dicipta adalah penting untuk prestasi yang cekap.
Penciptaan M dan P
-
M (Mesin): M mewakili urutan OS dan dicipta apabila goroutine dijadualkan untuk dijalankan. Bilangan M pada mulanya ditetapkan oleh masa jalan. Pembolehubah persekitaran GOMAXPROCS.
-
P (Pemproses): A P ialah pemproses yang melaksanakan goroutine. Setiap P dikaitkan dengan M. Apabila blok M, M baharu boleh dibuat untuk melaksanakan gorout pada P tersebut.
Analisis Senario
Dalam contoh kod anda, anda mencipta berbilang goroutine yang melakukan operasi menyekat. Dalam senario ini:
- Kumpulan pertama goroutin akan dijadualkan pada kejadian P sedia ada.
- Jika semua baris gilir tempatan P penuh, M baharu akan dibuat untuk mengendalikan limpahan goroutines.
- Walau bagaimanapun, memandangkan gorouti anda melakukan operasi menyekat dalam go func(), M yang dikaitkan dengan gorouti yang disekat akan dialih keluar daripada P dan diletakkan pada kumpulan benang terbiar.
- Baharu M akan dibuat untuk menggantikan M yang disekat dan terus melaksanakan goroutine pada P itu.
Kesimpulan
Ringkasnya, penjadual Go mencipta M baharu apabila goroutine dijadualkan untuk dijalankan dan urutan OS percuma tidak tersedia. P baharu dicipta apabila baris gilir tempatan bagi P sedia ada penuh. Walau bagaimanapun, dalam kes menyekat goroutines, bilangan M yang dicipta boleh melebihi bilangan teras maya, kerana setiap operasi menyekat memerlukan M yang berasingan.
Sumber Tambahan
- [GOMAXPROCS dalam Blog Go](https://blog.golang.org/GOMAXPROCS)
- [Go Goroutine, Thread OS dan Pengurusan CPU](https://godoc.org/ runtime/debug#SetMaxThreads)
- [Asas GMP](https://www.programmersought.com/article/79557885527/)
Atas ialah kandungan terperinci Bilakah Penjadual Go Mencipta M dan P Baharu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!