Sobes.tech
Middle+

როგორ არის მოწყობილი გორუტინები და რამდენი მეხსიერება იკავებენ სტეკში?

sobes.tech AI

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

Goroutine — ეს არის მსუბუქი შესრულების ნაკადი, რომელსაც მართავს Go-ის (runtime) გარემო. ისინი მრავალფლექსირდებიან სისტემური ნაკადების (თრედპულების) მცირე რაოდენობაზე.

ძირითადი კომპონენტები:

  • Stack: თითოეულ goroutine-ს აქვს ცალკე, გაფართოებადი stack. თავდაპირველად მცირე (16KB Go 1.4+-ით, ადრე 8KB), შეიძლება საჭიროების მიხედვით გაიზარდოს ან შემცირდეს.
  • Go-ის გრაფიკი: განახორციელებს M:N მოდელს (M goroutine N სისტემურ ნაკადზე). ის პასუხისმგებელია goroutine-ების გადართვაზე ხელმისაწვდომ სისტემურ ნაკადებზე. გადართვა ხდება ბლოკირებადი ოპერაციების (შესვლა/გამოსვლა, არხზე მოლოდინი) ან გამარტივებული runtime.Gosched()-ის გამოძახების დროს.
  • კონტექსტი: შეიცავს მაჩვენებელს მანქანური კოდის შესრულებისთვის, მაჩვენებელს stack-ზე და სხვა მეტა-ინფორმაციას, რომელიც გრაფიკს სჭირდება.

Go 1.4-დან დაწყებული, goroutine-ის საწყისი stack-ის ზომა 16KB-ია. ეს ზომა არ არის ფიქსირებული და შეიძლება დინამიურად შეიცვალოს.