Какво е горутина? Как се различава от системен нишка? Разкажи за планировчика на 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 ефективно да използва системните ресурси и да се мащабира на многоядрени системи.