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-ია. ეს ზომა არ არის ფიქსირებული და შეიძლება დინამიურად შეიცვალოს.