Middle+
Дар бораи модели идоракунии goroutines (GMP) дар Go гап зан.
sobes.tech AI
Ҷавоб аз AI
Го жоспарлаушысы GMP моделін пайдалана отырып, горутиналарды, операциялық жүйе жіптерін және логикалық процессорларды басқарады:
- G (Goroutine): Жеңіл, тәуелсіз орындалу бірлігі. Стек, нұсқаушы көрсеткіші және басқа жағдай туралы ақпаратты қамтиды. Бірнеше горутиналар бір операциялық жүйе жіпінде жұмыс істей алады.
- M (Machine): Операциялық жүйе жібі. Горутинаның кодын іске қосатын орындаушы ретінде қызмет етеді. M жиынтығы жоспарлаушыға қол жетімді болуы мүмкін.
- P (Processor): Логикалық процессор. Горутинаның орындалуы үшін контекст береді. Бұл M-да орындалуға дайын горутиналардың жергілікті кезегі бар. Әдепкі P саны
runtime.NumCPU()-ға тең.
Өзара әрекеттесу:
- G (горутинаны) құрып, оны глобалды немесе жергілікті P кезегіне орналастырады.
- Бос M P-ны сұрайды. Егер P қол жетімді болса, M оған қосылады.
- M P-дан бір горутинаны алады да, оны орындауды бастайды.
- Егер горутина блокталса (мысалы, I/O күту кезінде), M P-дан ажыратылады ("hand off"). P басқа M үшін немесе өзінің кезегіндегі басқа горутинаны жоспарлауға қалады.
- Блокталған горутинаны қайта жалғастыруға дайын болғанда, ол қайтадан P кезегіне немесе глобалды кезекке орналастырылады.
- Қажет болған жағдайда, жоспарлаушы M-ны құра алады (мысалы, барлық бар M-лар блокталса) немесе ол белсенді емес кезде жойылады.
Прецессия (мәжбүрлі ауысу): Жоспарлаушы белгілі бір уақыттан кейін (уақыт кесегі) горутинаның орындалуын тоқтата алады, бұл басқа горутиналар арасында процессор уақытын әділ бөлу үшін.
Жұмыс ұрлау (Work Stealing): Егер P өзінің жергілікті кезегіндегі горутиналарды сарқса, ол глобалды кезектен немесе басқа P-лардың кезектерінен горутиналарды "ұрлап" алуға тырысуы мүмкін.