网站首页 返回列表 像“草根”一样,紧贴着地面,低调的存在,冬去春来,枯荣无恙。
理解 goroutine
2020-06-10 02:56:40 admin 596
【编者的话】虽然已经有很多解释goroutine的优秀文章,但是对于初学者来说,大多都比较晦涩难懂,在这里总结一下自己对goroutine的理解以及相关资料
Goroutine
Goroutines 既不是OS 线程,也并非Green 线程
Goroutines是更高层次的coroutines(协程)抽象
Goroutine是并发的子程序(函数、闭包、方法),它们是nonpreemptive(非抢占式的) - 不能被中断。相反,协程有多个可允许中断或重入的点。
Go运行时观察Goroutines的状态,当阻塞时自动暂停它们,当它们非阻塞后又重新开启。这样Goroutine就是抢占式)的协程,而且只有当它们阻塞时。
运行goroutines的机制是由M:N调度器实现的,该调度器将M个green线程映射到N个OS线上,然后将Goroutines调度到green线程上。
当goroutines多于可用的green线程,调度器将在可用的线程中处理goroutines的分布确保当某些goroutines阻塞时,其他的goroutines依然可以执行。
Work Stealing
- fair scheduling
n个处理器, x个任务:每个处理器分配x/n个任务
Scheduler
- G go协程
- M OS线程(源代码中表示machine)
P context(源代码中表示processor)
GOMAXPROCS 控制着有多少context被用于运行时
<待续>
References:
转载文章,原文链接:
<Golang Tips> 理解 goroutine
0 条评论 0 人参与