Sobes.tech
Senior

Какво е горутина? Как се различава от системен нишка? Разкажи за планировчика на Go (GMP).

sobes.tech AI

Отговор от AI

Goroutine е лек поток за изпълнение в езика Go, управляван от средата за изпълнение на Go, а не от операционната система. За разлика от системния нишка, goroutine-ите имат много по-малък размер на стека (започват с няколко килобайта и могат да растат динамично), което позволява изпълнението на хиляди и дори милиони goroutine-и едновременно с ниски разходи.

Системните нишки се създават и планират от операционната система, имат фиксиран голям стек и операциите за превключване на контекста са по-скъпи.

Планировчикът на Go се базира на модела GMP:

  • G (goroutine) — самата goroutine, единица за изпълнение.
  • M (машина) — системен нишка (OS thread), върху който се изпълняват goroutine-ите.
  • P (процесор) — логически процесор, ресурс, необходим за изпълнение на goroutine на M.

P управлява опашката с готови за изпълнение goroutine-и (G). M може да изпълнява само една goroutine наведнъж, но благодарение на наличието на множество M и P, планировчикът ефективно разпределя goroutine-ите между системните нишки, осигурявайки конкуренция и паралелизъм.

Този подход позволява на Go ефективно да използва системните ресурси и да се мащабира на многоядрени системи.