记一次流水线工作单元设计/golang

先用一张图描述一个golang并发程序在运行时的Groutine Processor,Groutine和CPU的结构形态,和他们之间的关系。

简单说,这张图详细展示了某一时刻,程序对CPU资源的使用情况。

第一个观点: groutine在创建时,并不能指定要放入到哪个Groutine Processor。理由之一,Groutine Processor的调度策略包括任务窃取,即当自身的groutine队列没有可运行的groutine时,或从其他的Groutine Processor的groutine队列(应该是从队尾)中窃取一些可运行的groutine添加到自身的groutine队列中并运行。这里的“可运行”包括groutine存在且不被阻塞

第二个观点:P和M之间的调度,会涉及线程的上下文切换,即涉及系统调用(从用户空间的运行切换到内核空间的运行)。

以上知识会引出本篇文章的主题,如何将一个流水线的各项工作合理的分配到有限的groutine上,并合理充分利用的CPU资源。

 

剩余部分,不久更新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值