Sobes.tech
Junior — Middle

Дар кадом ҳолатҳо вазифаҳо дар гуруҳҳои goroutine ба навбати умумии нақшакашии иҷроиш дохил мешаванд?

sobes.tech AI

Ҷавоб аз AI

Дар Go вазифаҳо (goroutine-ҳо) дар ҳолатҳои зерин ба навбатии умумии нақшакаш (run queue) ҷойгир мешаванд:

  • Вақте, ки goroutine бо истифода аз go эҷод мешавад ва омодаи иҷро аст, он ба навбатии нақшакаш гузошта мешавад.
  • Агар goroutine монеъ шавад (масалан, дар амалиётҳои воридот-баромад, каналҳо ё ҳамоҳангсозӣ) ва сипас боз шавад, он ба навбат бармегардад.
  • Вақте, ки goroutine-и ҳозира тамом мешавад, нақшакаш навбатии ояндаро интихоб мекунад.

Нақшакашии Go модели M:N-ро истифода мебарад, ки дар он M — сӯрохиҳои системӣ, N — goroutine-ҳо мебошанд. Бисёре аз goroutine-ҳо мавҷуданд, ки тавассути навбатҳо ба сӯрохиҳо тақсим мешаванд. Навбатии нақшакаш як сохтор аст, ки дар он goroutine-ҳо барои иҷро омода нигоҳ дошта мешаванд.

Масалан:

func main() {
    go func() {
        fmt.Println("Goroutine оғоз шуд")
    }()
    time.Sleep(time.Second) // Мутталоем, ки goroutine иҷро шавад
}

Ин ҷо, пас аз эҷод, goroutine ба навбатии нақшакаш барои иҷро ҷойгир мешавад.