Goroutines 8kb 和 windows OS 线程 1 mb

作为 Windows 用户,我知道 OS 线程会消耗 ~1 Mb 的内存,因为如果 OS 线程更加贪吃的话,每个线程By default, Windows allocates 1 MB of memory for each thread’s user-mode stack.如何golang使用 ~8kb 的内存goroutine。是goroutine虚拟线程吗?


富国沪深
浏览 173回答 2
2回答

慕码人8056858

Goroutines 不是线程,它们是(来自规范):...在同一地址空间内的独立并发控制线程或goroutine。Effective Go将它们定义为:它们之所以被称为goroutine,是因为现有的术语——线程、协程、进程等——传达了不准确的内涵。goroutine 有一个简单的模型:它是一个与同一地址空间中的其他 goroutine 并发执行的函数。它是轻量级的,成本比分配堆栈空间多一点。并且堆栈开始时很小,因此它们很便宜,并且可以通过根据需要分配(和释放)堆存储来增长。Goroutines 没有自己的线程。相反,多个 goroutines(可能)被复用到同一个 OS 线程上,所以如果一个 goroutines 应该阻塞(例如等待 I/O 或阻塞通道操作),其他 goroutines 继续运行。同时执行 goroutine 的实际线程数可以通过该runtime.GOMAXPROCS()函数设置。从runtime包文档中引用:GOMAXPROCS 变量限制了可以同时执行用户级 Go 代码的操作系统线程的数量。代表Go代码在系统调用中可以阻塞的线程数没有限制;这些不计入 GOMAXPROCS 限制。请注意,在当前的实现中,默认情况下只有 1 个线程用于执行 goroutine。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go