网站首页 返回列表 像“草根”一样,紧贴着地面,低调的存在,冬去春来,枯荣无恙。

理解 goroutine

2020-06-10 02:56:40 admin 596

【编者的话】虽然已经有很多解释goroutine的优秀文章,但是对于初学者来说,大多都比较晦涩难懂,在这里总结一下自己对goroutine的理解以及相关资料

Goroutine

  • Goroutine vs Thread - 推荐视频

  • Understanding Channels - 推荐视频

  • 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

关键字词golangTips

分享到:

如需留言,请 登录,没有账号?请 注册

0 条评论 0 人参与

顶部 底部