go的奇怪问题,多线程死循环不占CPU。

ybeetle · 2016-05-07 02:25:18 · 5149 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2016-05-07 02:25:18 的主题,其中的信息可能已经有所发展或是发生改变。

这一段怎么看都时死循环的代码,居然不占CPU,说明go内部给锁住了。

但是把 ks := make([]int, 100000) 改成 ks := make([]int, 1000) 就可以跑满CPU了。 我用的是 1.6版, 1.5版的这种问题更严重。


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

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

5149 次点击  
加入收藏 微博
3 回复  |  直到 2016-05-20 01:26:03
k_light
k_light · #1 · 9年之前

我用go1.6.2 windows/amd64测试了一下,发现两者都占cpu,ks := make([]int, 100000)约占60%,改成 ks := make([]int, 1000)后约占90%,后者明显要高一些。

ybeetle
ybeetle · #2 · 9年之前

go 语言在 make 时有bug 如果分配的内存大了多了,会锁死。 所以要求效率时,make 分配的内存不要去释放。

ybeetle
ybeetle · #3 · 9年之前

在4核的机器上不明显,我16核的机器这差距明显。。

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