Sobes.tech
Middle+

გაამბე გო-ში გორუტინების მართვის მოდელზე (GMP).

sobes.tech AI

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

Go-ის დაგეგმვა მართავს გორუტინებს, ოპერაციული სისტემის ნაკადებს და ლოგიკურ პროცესორებს GMP მოდელის გამოყენებით:

  • G (Goroutine): მსუბუქი, დამოუკიდებელი შესრულების ერთეული. შეიცავს სტეკს, ინსტრუქციის მაჩვენებელს და სხვა მდგომარეობის ინფორმაციას. მრავალი გორუტინა შეიძლება მუშაობდეს ერთ ოპერაციული სისტემის ნაკადზე.
  • M (Machine): ოპერაციული სისტემის ნაკადი. ასრულებს გორუტინის კოდის შესრულებას. მრავალი M შეიძლება იყოს ხელმისაწვდომი დაგეგმვისთვის.
  • P (Processor): ლოგიკური პროცესორი. უზრუნველყოფს კონტექსტს გორუტინის შესრულებისთვის. შეიცავს ადგილობრივ გორუტინების რიგს, რომლებიც მზად არიან შესრულებისთვის ამ M-ზე. P-ის რაოდენობა ჩვეულებრივ შეესაბამება runtime.NumCPU()-ს.

ურთიერთქმედება:

  1. გორუტინა (G) შექმნილია და მოთავსებულია გლობალურ ან ადგილობრივ P-ის რიგში.
  2. თავისუფალი M ითხოვს P-ს. თუ P ხელმისაწვდომია, M მასთან მიერთდება.
  3. M იღებს გორუტინას ადგილობრივ რიგიდან და იწყებს მისი შესრულებას.
  4. თუ გორუტინა ბლოკირდება (მაგალითად, I/O-ს მოლოდინში), M გამორთულია P-დან („hand off“). P რჩება ხელმისაწვდომი სხვა M-ისთვის ან გეგმავს სხვა გორუტინას თავის რიგში.
  5. როდესაც ბლოკირებული გორუტინა მზად არის განახლებისთვის, ის ისევ მოთავსდება P-ის რიგში ან გლობალურ რიგში.
  6. M შეიძლება შეიქმნას დაგეგმვის მიერ საჭიროების შემთხვევაში (მაგალითად, თუ ყველა არსებული M ბლოკირებულია) ან წაიშალოს არაქტივობის დროს.

Preemption (შედარებითი გადართვა): დაგეგმვა შეუძლია გორუტინის შესრულების შეჩერება გარკვეული დროის შემდეგ (time slice), რათა გარანტირებული იყოს სამართლიანი პროცესორის დრო სხვა გორუტინებისთვის.

Work Stealing (სამუშაოს მოპარვა): თუ P-ის ადგილობრივ რიგში გორუტინების რაოდენობა ამოიწურა, ის შეიძლება სცადოს „გატეხოს“ გორუტინები გლობალურ რიგიდან ან სხვა P-ის რიგებიდან.