Goroutine 是一种协作式多任务,而不是抢占式多任务。
一个Goroutine如果一直在计算,比如死循环,那么就会一直占用当前线程,直到它结束或者主动放弃。
但是Go系统里有很多个线程,部分被占用还会新开线程,不会让其它 Goroutine饿死。
你把GOMAXPROCS限制成 1 是你自己的问题,Go只是语言和运行库,它不是OS,不能强制Goroutine放弃CPU。
即使你用普通C++写普通多线程,如果你把某个线程的优先级设置成实时,如果系统只有一颗CPU核的话,其它线程也会统统饿死。