Переключение контекста - сохранение состояния потока и загрузка другого. Частые переключения - накладные расходы. В Go переключение между горутинами дешевле переключения потоков ОС: планировщик Go переключает горутины на одних и тех же потоках. Блокирующий syscall (например, чтение с диска) может занять поток ОС; тогда создается новый поток для других горутин. Не блокировать горутины долгими syscall без ограничения их числа.