Sobes.tech
Junior — Middle

გთხოვთ, ახსნათ, რატომ არ შეიძლება პირდაპირ შეესაბამებოდეს ნაკადების რაოდენობა გორუტინების რაოდენობას Go-ში.

sobes.tech AI

პასუხი AI-სგან

Go ენის ფარგლებში, goroutine-ების რაოდენობა არ შეესაბამება ოპერაციული სისტემის ძაფების რაოდენობას, რადგან goroutine-ები მსუბუქი ძაფებია, რომლებიც მართავს Go-ის დროის მართვის სისტემამ, არა ოპერაციული სისტემამ.

მთავარი მიზეზები:

  • მულტიპლექსირება: Go-ის დროის მართვის სისტემა მრავალ goroutine-ებს ნაწილავს შეზღუდულ სისტემურ ძაფებზე და ეფექტურად ცვლის მათ შორის.
  • მსუბუქი წონა: Goroutine-ის შექმნა მოითხოვს ბევრად ნაკლებ რესურსს, ვიდრე სისტემური ძაფის შექმნა.
  • Go-ის დაგეგმვა: ის მართავს goroutine-ების შესრულებას, რაც ათასობით მათგანს საშუალებას აძლევს მუშაობა რამდენიმე ძაფზე.

ამიტომ, ჩვეულებრივ, ერთ ძაფზე მრავალი goroutine მუშაობს, რაც საშუალებას აძლევს რესურსების ეფექტიან გამოყენებას და კონკურენტული პროგრამირების გამარტივებას.

მაგალითი:

runtime.GOMAXPROCS(4) // ოპერაციული სისტემის ძაფების რაოდენობის განსაზღვრა

for i := 0; i < 1000; i++ {
    go func(id int) {
        fmt.Println("Goroutine", id)
    }(i)
}

აქ, 1000 goroutine მუშაობს 4 ოპერაციული სისტემის ძაფზე.