区块链技术博客
www.b2bchain.cn

Go调度器原理求职学习资料

本文介绍了Go调度器原理求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

  • GPM模型
    一个G对应一个goroutine

    一个P对应一个逻辑处理器,并维护一个G的本地运行队列,数量与GOMAXPROCS数量一致,指最大并行数

    一个M对应一个内核线程,数量不固定,由go运行时指定,默认设置为最大10000.

    gorutine 与 内核线程 N:M映射

  • 全局运行队列
    go运行时会维护一个G的全局运行队列,p会在一定条件下,来全局运行队列中拿G放到自己的本地运行队列中。全局运行队列会使用mutex来控制多个p的并发访问。

    全局运行对列使用mutex来实现多个p的并发访问,由于锁的竞争太严重,所以每个p中引入了本地运行队列,以减少锁的竞争。

  • 本地运行队列
    每一个p都会维护一个G的本地运行队列,p会不断的在本地运行队列中取出G挂载到内核线程上去运行。当通过 go 关键字创建一个新的 goroutine 的时候,它会优先被放入 P 的本地队列。

  • netpoll(网络轮询器)
    比如select/poll/epoll等IO多路复用,goroutine将被挂起,直到IO事件触发,这是将goroutine重新放回运行队列中。

  • 调度过程
    p首先检查本地运行队列,如果本地运行队列为空,首先会去检查全局运行队列(需要加锁),如果全局运行队列也为空,然后去检查网络轮询器(network poller)中是否有IO事件被触发,如果还没有,这时会进行”窃取“,即去其他p的本地运行队列中拿一部分G放到自己的本地运行队列中。

  • GPM模型
    一个G对应一个goroutine

    一个P对应一个逻辑处理器,并维护一个G的本地运行队列,数量与GOMAXPROCS数量一致,指最大并行数

    一个M对应一个内核线程,数量不固定,由go运行时指定,默认设置为最大10000.

    gorutine 与 内核线程 N:M映射

  • 全局运行队列
    go运行时会维护一个G的全局运行队列,p会在一定条件下,来全局运行队列中拿G放到自己的本地运行队列中。全局运行队列会使用mutex来控制多个p的并发访问。

    全局运行对列使用mutex来实现多个p的并发访问,由于锁的竞争太严重,所以每个p中引入了本地运行队列,以减少锁的竞争。

  • 本地运行队列
    每一个p都会维护一个G的本地运行队列,p会不断的在本地运行队列中取出G挂载到内核线程上去运行。当通过 go 关键字创建一个新的 goroutine 的时候,它会优先被放入 P 的本地队列。

  • netpoll(网络轮询器)
    比如select/poll/epoll等IO多路复用,goroutine将被挂起,直到IO事件触发,这是将goroutine重新放回运行队列中。

  • 调度过程
    p首先检查本地运行队列,如果本地运行队列为空,首先会去检查全局运行队列(需要加锁),如果全局运行队列也为空,然后去检查网络轮询器(network poller)中是否有IO事件被触发,如果还没有,这时会进行”窃取“,即去其他p的本地运行队列中拿一部分G放到自己的本地运行队列中。

  • GPM模型
    一个G对应一个goroutine

    一个P对应一个逻辑处理器,并维护一个G的本地运行队列,数量与GOMAXPROCS数量一致,指最大并行数

    一个M对应一个内核线程,数量不固定,由go运行时指定,默认设置为最大10000.

    gorutine 与 内核线程 N:M映射

  • 全局运行队列
    go运行时会维护一个G的全局运行队列,p会在一定条件下,来全局运行队列中拿G放到自己的本地运行队列中。全局运行队列会使用mutex来控制多个p的并发访问。

    全局运行对列使用mutex来实现多个p的并发访问,由于锁的竞争太严重,所以每个p中引入了本地运行队列,以减少锁的竞争。

  • 本地运行队列
    每一个p都会维护一个G的本地运行队列,p会不断的在本地运行队列中取出G挂载到内核线程上去运行。当通过 go 关键字创建一个新的 goroutine 的时候,它会优先被放入 P 的本地队列。

  • netpoll(网络轮询器)
    比如select/poll/epoll等IO多路复用,goroutine将被挂起,直到IO事件触发,这是将goroutine重新放回运行队列中。

  • 调度过程
    p首先检查本地运行队列,如果本地运行队列为空,首先会去检查全局运行队列(需要加锁),如果全局运行队列也为空,然后去检查网络轮询器(network poller)中是否有IO事件被触发,如果还没有,这时会进行”窃取“,即去其他p的本地运行队列中拿一部分G放到自己的本地运行队列中。

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » Go调度器原理求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们