Ответ
В Go нельзя напрямую управлять общим количеством системных потоков, но можно контролировать, сколько потоков одновременно выполняют код на Go.
Это делается с помощью GOMAXPROCS
. Планировщик Go использует модель M:N, где M горутин выполняются на N системных потоках.
GOMAXPROCS
как раз и определяет это значение N.
Как установить:
- Переменная окружения (рекомендуется):
export GOMAXPROCS=4
-
В коде программы:
import "runtime" func main() { // Установить количество потоков равным 4 runtime.GOMAXPROCS(4) }
Важные моменты:
- Значение по умолчанию: Начиная с Go 1.5,
GOMAXPROCS
по умолчанию равно количеству доступных ядер ЦП. В большинстве случаев это оптимальное значение. - Блокирующие системные вызовы:
GOMAXPROCS
не ограничивает потоки, которые создаются для обработки блокирующих системных вызовов (например, файловый ввод-вывод). Планировщик может создавать дополнительные потоки, чтобы другие горутины продолжали выполняться, пока одна из них заблокирована. - Когда изменять: Изменение значения по умолчанию требуется редко, в основном для тонкой настройки производительности в специфических сценариях (например, CPU-bound приложения на системах с очень большим количеством ядер) или для искусственного ограничения потребления ЦП.
Итог: Оставляйте значение по умолчанию, если нет веских причин его менять. Go отлично справляется с управлением потоками самостоятельно.