Runtime в Go - это среда выполнения, которая включает в себя:
- Планировщик (scheduler): управляет горутинами и их выполнением на системных потоках.
- Сборщик мусора (garbage collector): автоматически управляет памятью.
- Системные вызовы: обертки над системными вызовами ОС.
- Сетевой ввод/вывод: неблокирующее сетевое взаимодействие.
Планировщик Go реализует модель M:N, где M горутин выполняются на N системных потоках (OS threads). Используется трехкомпонентная модель G-P-M:
- G (Goroutine): легковесный поток исполнения, управляемый планировщиком Go.
- P (Processor): логический процессор, представляющий контекст, необходимый для выполнения горутин (очередь горутин, кэш стека). Количество P по умолчанию равно
runtime.NumCPU()
.
- M (Machine): системный поток (OS thread), на котором выполняется код.
Принцип работы планировщика:
- Создание горутин: Новые горутины создаются с помощью ключевого слова
go
.
- Помещение в очередь: Созданная горутина помещается в локальную очередь P или глобальную очередь, если локальная переполнена.
- Выполнение: M привязан к P и выбирает горутину из его локальной очереди (или глобальной, если локальная пуста). M выполняет код горутины.
- Переключение контекста: Происходит, когда горутина блокируется (например, при системном вызове, ожидании мьютекса, операции ввода-вывода) или когда планировщик решает переместить горутину (
Runtime в Go - это среда выполнения, которая включает в себя:
- Планировщик (scheduler): управляет горутинами и их выполнением на системных потоках.
- Сборщик мусора (garbage collector): автоматически управляет памятью.
- Системные вызовы: обертки над системными вызовами ОС.
- Сетевой ввод/вывод: неблокирующее сетевое взаимодействие.
Планировщик Go реализует модель M:N, где M горутин выполняются на N системных потоках (OS threads). Используется трехкомпонентная модель G-P-M:
- G (Goroutine): легковесный поток исполнения, управляемый планировщиком Go.
- P (Processor): логический процессор, представляющий контекст, необходимый для выполнения горутин (очередь горутин, кэш стека). Количество P по умолчанию равно
runtime.NumCPU()
.
- M (Machine): системный поток (OS thread), на котором выполняется код.
Принцип работы планировщика:
- Создание горутин: Новые горутины создаются с помощью ключевого слова
go
.
- Помещение в очередь: Созданная горутина помещается в локальную очередь P или глобальную очередь, если локальная переполнена.
- Выполнение: M привязан к P и выбирает горутину из его локальной очереди (или глобальной, если локальная пуста). M выполняет код горутины.
- Переключение контекста: Происходит, когда горутина блокируется (например, при системном вызове, ожидании мьютекса, операции ввода-вывода) или когда планировщик решает переместить горутину (