goroutine #
golang 并发模型 #
goroutine 记得 return 或者中断,不然容易造成 goroutine 占用大量 CPU #
Goroutine 如何调度? #
每个线程会都占用 1MB
以上的内存空间,在对线程进行切换时不止会消耗较多的内存,恢复寄存器中的内容还需要向操作系统申请或者销毁对应的资源,
每一次线程上下文的切换都需要消耗约为 1us
,
但是 Go 调度器对 Goroutine 的上下文切换约为 0.2us
,减少了 80% 的额外开销。
Go 语言的调度器通过使用与 CPU 数量相等的线程减少线程频繁切换的内存开销, 同时在每一个线程上执行额外开销更低的 Goroutine 来降低操作系统和硬件的负载。
一个 Goroutine 既要包含要执行的代码, 又要包含用于执行该代码的栈
和 PC
、SP 指针
。
参考:
叶王 © 2013-2024 版权所有。如果本文档对你有所帮助,可以请作者喝饮料。