Каждая процедура может использовать максимум одну нить за раз. Использует ли он поток или нет, зависит от того, что он делает. Значение GOMAXPROCS определяет количество потоков, которые можно использовать при свободном запуске кода Go - иными словами, максимальный уровень параллелизма.
Однако можно использовать большее количество потоков, даже если GOMAXPROCS = 1, когда подпрограммы блокируются непосредственно при системных вызовах или вызовах в C.
Следующие операции не заставляют программу использовать поток, когда они блокируют:
- операции с каналами
- сетевые операции
- спящий
- все примитивы в пакете sync
Это означает, например, что если у вас есть много подпрограмм, которые открывают / dev / ttyxx и блокируют чтение, вы будете использовать поток для каждого из них. То же самое происходит, если вы выполняете загрузку процессов и ожидаете их завершения.