golang不是单进程的,而是多线程;golang的线程模型是M P G模型,整体上Go程与内核线程是多对多对应的,因此首先来讲就一定是多线程的。

golang不是单进程的,而是多线程。

Golang有些所谓的M比N模型,M个线程下可以创建N个go routine,一般而言N远大于M,本质上属于多线程模型,但是协程的调度由Go的runtime决定,强调开发者应该使用channel进行协程之间的同步。

go routineruntime
goroutine

而goroutine的创建理论上来说只受内存限制,一般而言最大也就2KB,对于一个线程2MB空间大小理论上来说可以轻易上1000个,当然这只是理想情况下,所以OS线程数不会随着goroutine创建个数增加而增加。线程调度是对于go来说会比较耗费性能,频繁切换调度只会在goroutine之间存在,线程只会保持与cpu数相同的活跃线程数。