Sobes.tech
Middle+

Дар бораи модели идоракунии goroutines (GMP) дар Go гап зан.

sobes.tech AI

Ҷавоб аз AI

Го жоспарлаушысы GMP моделін пайдалана отырып, горутиналарды, операциялық жүйе жіптерін және логикалық процессорларды басқарады:

  • G (Goroutine): Жеңіл, тәуелсіз орындалу бірлігі. Стек, нұсқаушы көрсеткіші және басқа жағдай туралы ақпаратты қамтиды. Бірнеше горутиналар бір операциялық жүйе жіпінде жұмыс істей алады.
  • M (Machine): Операциялық жүйе жібі. Горутинаның кодын іске қосатын орындаушы ретінде қызмет етеді. M жиынтығы жоспарлаушыға қол жетімді болуы мүмкін.
  • P (Processor): Логикалық процессор. Горутинаның орындалуы үшін контекст береді. Бұл M-да орындалуға дайын горутиналардың жергілікті кезегі бар. Әдепкі P саны runtime.NumCPU()-ға тең.

Өзара әрекеттесу:

  1. G (горутинаны) құрып, оны глобалды немесе жергілікті P кезегіне орналастырады.
  2. Бос M P-ны сұрайды. Егер P қол жетімді болса, M оған қосылады.
  3. M P-дан бір горутинаны алады да, оны орындауды бастайды.
  4. Егер горутина блокталса (мысалы, I/O күту кезінде), M P-дан ажыратылады ("hand off"). P басқа M үшін немесе өзінің кезегіндегі басқа горутинаны жоспарлауға қалады.
  5. Блокталған горутинаны қайта жалғастыруға дайын болғанда, ол қайтадан P кезегіне немесе глобалды кезекке орналастырылады.
  6. Қажет болған жағдайда, жоспарлаушы M-ны құра алады (мысалы, барлық бар M-лар блокталса) немесе ол белсенді емес кезде жойылады.

Прецессия (мәжбүрлі ауысу): Жоспарлаушы белгілі бір уақыттан кейін (уақыт кесегі) горутинаның орындалуын тоқтата алады, бұл басқа горутиналар арасында процессор уақытын әділ бөлу үшін.

Жұмыс ұрлау (Work Stealing): Егер P өзінің жергілікті кезегіндегі горутиналарды сарқса, ол глобалды кезектен немесе басқа P-лардың кезектерінен горутиналарды "ұрлап" алуға тырысуы мүмкін.