Можно ли повлиять на работу планировщика

«Можно ли повлиять на работу планировщика» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, можно, но с осторожностью. В Go планировщик управляет горутинами автоматически, но есть несколько способов повлиять на его работу:

  1. runtime.GOMAXPROCS(n) – устанавливает максимальное количество ядер CPU, которые могут использоваться (по умолчанию равно количеству логических ядер).

  2. runtime.Gosched() – уступает текущий поток планировщику, позволяя другим горутинам выполняться.

  3. Привязка к потоку ОС – через runtime.LockOSThread(), но это редко нужно.

Пример:

runtime.GOMAXPROCS(1) // ограничиваем использование одним ядром
go func() {
    runtime.Gosched() // явно уступаем выполнение
}()

Важно: Чрезмерное вмешательство может снизить производительность. Обычно лучше довериться планировщику Go.