如何让goroutine占用cpu并由我(代码)控制来决定是否让出cpu?

ddxx11223 · 2017-12-05 08:15:26 · 1483 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2017-12-05 08:15:26 的主题,其中的信息可能已经有所发展或是发生改变。

RT。
比如现在有多个goroutine和多个channel,每个goroutine对应一个channel,会不断的从channel里pop数据出来。
我怎样让压力大的goroutine(即对应的channel里面数据较多)多占用cpu,压力小的(即对应的channel数据较少)少占用cpu,有没有runtime的代码可以去显式控制?


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1483 次点击  
加入收藏 微博
3 回复  |  直到 2017-12-08 18:28:26
channel
channel · #1 · 7年之前

应该是没有,感觉你应该从业务角度解决这个问题,而不是语言层面。

zweite
zweite · #2 · 7年之前

sleep

leavesdrift
leavesdrift · #3 · 7年之前

channel的通信应该本质是也是I/O,但是I/O并不耗费CPU,它需要的CPU本身就非常小。而且Goroutine调度器做了很多事情,比如对占用时间长的Goroutine发起抢占,所以本身当你开的Goroutine只有两个,一个耗时长,另一个耗时非常短,这种情况压根儿就没压力。当你Goroutine有非常多,一个耗时长,另外一堆耗时短,那么首先这些Goroutine会均匀分配到调度器上(前提是你开了runtime.GOMAXPROCS(X)有多个调度器),另一方面Go本身就有一个不需要调度器的监控线程,隔很短的时间便会抢占一次这个耗时长的Goroutine。

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传