Junior — Middle
Чӣ гуна иваз кардани иҷро дар байни goroutine-ҳои гуногун дар забони Go анҷом дода мешавад?
sobes.tech AI
Ҷавоб аз AI
Дар забони барномасозии Go, иваз кардани иҷро байни goroutines аз ҷониби планировщике runtime-и Go сурат мегирад, ки модели M:N-ро амалӣ мекунад — маҷмӯи goroutines (M), ки дар рӯйхати системавии сӯрохиҳо (N) нақша гирифта шудаанд.
Планировщики Go дар шакли ҳамкорӣ ва пешакӣ кор мекунад:
- Горутина метавонад ба таври равшан назоратро тавассути даъвати
runtime.Gosched()супорад, ки имкон медиҳад дигар goroutines иҷро шаванд. - Планировщик метавонад goroutine-ро дар нуқтаҳои муайян (масалан, дар вақти даъвати амалҳои блокшуда, даъватҳои системавӣ, амалҳои воридот/баромад) қатъ кунад.
- Runtime-и Go автоматӣ контекстро байни goroutines иваз мекунад ва ҳолати онҳоро нигоҳ медорад (стек, сабтҳо).
Бинобар ин, иваз кардани байни goroutines дар дохили runtime-и Go сурат мегирад, ва мутахассис одатан инро мустақиман назорат намекунад.
Масали равшан супоридани назорат:
goroutine1 := func() {
for i := 0; i < 5; i++ {
fmt.Println("Goroutine 1 -", i)
runtime.Gosched() // супоридани иҷро ба дигар goroutines
}
}
func main() {
go goroutine1()
for i := 0; i < 5; i++ {
fmt.Println("Горути асосӣ -", i)
}
}
Ин ҷо, runtime.Gosched() имкон медиҳад, ки ба дигар goroutines гузаред.