Ark*_*Ark 2 windows multithreading go threadpool goroutine
作为Windows用户,我知道操作系统线程占用大约1 Mb的内存,因为如果OS线程更加贪婪,每个内存By default, Windows allocates 1 MB of memory for each thread’s user-mode stack.如何golang使用~8kb的内存goroutine.是goroutine那种虚拟线程的?
Goroutines不是线程,它们(来自规范):
... 在同一地址空间内的独立并发控制线程或goroutine.
Effective Go将它们定义为:
它们被称为goroutines,因为现有的术语 - 线程,协同程序,进程等 - 传达了不准确的内涵.goroutine有一个简单的模型:它是一个与同一地址空间中的其他goroutine同时执行的函数.它是轻量级的,比堆栈空间的分配花费更多.并且堆栈开始很小,因此它们很便宜,并且通过根据需要分配(和释放)堆存储来增长.
Goroutines没有自己的线程.相反,多个goroutine(可以)被复用到相同的OS线程上,因此如果应该阻塞(例如,等待I/O或阻塞信道操作),则其他goroutine继续运行.
可以使用该runtime.GOMAXPROCS()函数设置同时执行goroutines的实际线程数.引用runtime包文档:
GOMAXPROCS变量限制了可以同时执行用户级Go代码的操作系统线程数.代表Go代码在系统调用中可以阻塞的线程数没有限制; 那些不计入GOMAXPROCS限制.
请注意,在当前实现中,默认情况下只使用1个线程来执行goroutines.