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

golang_gc · 2018-01-17 22:58:32 · 1838 次点击

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

import _ "net/http/pprof"

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

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

运行程序,打开浏览器

http://localhost:8080/debug/pprof

你要的数据就会出现了

#1
更多评论

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

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

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

#2

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

#3