在8核cpu 15G内存的设备上开启10万个协程处理10万条数据 没有任何log打印的情况下 耗时4min,查看设备信息 cpu最高峰才使用141% 内存最高才占用8% ,为什么这么慢呀,协程并发处理感觉没用上
虽然协程切换有开销,处理10万条数据也不至于这么慢
1. pprof跟踪
2. 对于单条数据处理做个Benchmark,带上-benchmem看看单次内存分配情况
3. 协程数控制在cpu核心数2倍试试看
最好贴源码,方便大家帮你找问题
#2
更多评论
建议打开`pprof`在线上看运行中的协程数目以及heap
建议在main函数中开启一个新协程显示runtime信息
```
import _ "net/http/pprof"
func main() {
go http.ListenAndServ(":8080",nil)
}
```
代码手打的,如果有错别字请见谅。
运行程序,打开浏览器
http://localhost:8080/debug/pprof
你要的数据就会出现了
#1
主要得看协程里具体做的事情,如果是IO任务,启动10万个应该不至于这么慢,如果是计算密集型的任务,最好设计成go routine+channel的任务模式,这样才能减少go routine的切换开销
#3