为了账号安全,请及时绑定邮箱和手机立即绑定

Goroutines 8kb 和 windows OS 线程 1 mb

Goroutines 8kb 和 windows OS 线程 1 mb

Go
富国沪深 2021-10-04 16:12:27
作为 Windows 用户,我知道 OS 线程会消耗 ~1 Mb 的内存,因为如果 OS 线程更加贪吃的话,每个线程By default, Windows allocates 1 MB of memory for each thread’s user-mode stack.如何golang使用 ~8kb 的内存goroutine。是goroutine虚拟线程吗?
查看完整描述

2 回答

?
慕码人8056858

TA贡献1803条经验 获得超6个赞

Goroutines 不是线程,它们是(来自规范):

...在同一地址空间内的独立并发控制线程或goroutine

Effective Go将它们定义为:

它们之所以被称为goroutine,是因为现有的术语——线程、协程、进程等——传达了不准确的内涵。goroutine 有一个简单的模型:它是一个与同一地址空间中的其他 goroutine 并发执行的函数。它是轻量级的,成本比分配堆栈空间多一点。并且堆栈开始时很小,因此它们很便宜,并且可以通过根据需要分配(和释放)堆存储来增长。

Goroutines 没有自己的线程。相反,多个 goroutines(可能)被复用到同一个 OS 线程上,所以如果一个 goroutines 应该阻塞(例如等待 I/O 或阻塞通道操作),其他 goroutines 继续运行。

同时执行 goroutine 的实际线程数可以通过该runtime.GOMAXPROCS()函数设置。从runtime包文档中引用:

GOMAXPROCS 变量限制了可以同时执行用户级 Go 代码的操作系统线程的数量。代表Go代码在系统调用中可以阻塞的线程数没有限制;这些不计入 GOMAXPROCS 限制。

请注意,在当前的实现中,默认情况下只有 1 个线程用于执行 goroutine。


查看完整回答
反对 回复 2021-10-04
  • 2 回答
  • 0 关注
  • 172 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信