在8核cpu 15G内存的设备上开启10万个协程处理10万条数据 没有任何log打印的情况下 耗时4min为什么这么慢呀,协程并发处理感觉没用上

golang_gc · 2018-01-17 22:58:32 · 1838 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2018-01-17 22:58:32 的主题,其中的信息可能已经有所发展或是发生改变。

在8核cpu 15G内存的设备上开启10万个协程处理10万条数据 没有任何log打印的情况下 耗时4min,查看设备信息 cpu最高峰才使用141% 内存最高才占用8% ,为什么这么慢呀,协程并发处理感觉没用上


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

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

1838 次点击  
加入收藏 微博
4 回复  |  直到 2018-01-22 12:11:57
xialeistudio
xialeistudio · #1 · 7年之前

建议打开pprof在线上看运行中的协程数目以及heap 建议在main函数中开启一个新协程显示runtime信息

import _ "net/http/pprof"

func main() {
    go http.ListenAndServ(":8080",nil)
}

代码手打的,如果有错别字请见谅。

运行程序,打开浏览器

http://localhost:8080/debug/pprof

你要的数据就会出现了

victorl
victorl · #2 · 7年之前

虽然协程切换有开销,处理10万条数据也不至于这么慢

  1. pprof跟踪
  2. 对于单条数据处理做个Benchmark,带上-benchmem看看单次内存分配情况
  3. 协程数控制在cpu核心数2倍试试看

最好贴源码,方便大家帮你找问题

jong
jong · #3 · 7年之前

主要得看协程里具体做的事情,如果是IO任务,启动10万个应该不至于这么慢,如果是计算密集型的任务,最好设计成go routine+channel的任务模式,这样才能减少go routine的切换开销

yangheng
yangheng · #4 · 7年之前

高并发和高性能是两回事

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