结论:协程池还是有必要的,能够有效减小GC的压力。
我的某个服务,为了方(tou)便(lan),一些异步处理的场合直接go出协程来处理。
服务中使用这样的代码来统计GC的延迟:
var mem runtime.MemStats
runtime.ReadMemStats(&mem)
for _, ns := range mem.PauseNs {
//汇总
}
在我进行runtime信息统计的时候发现:没有大量go协程的服务,从未出现1ms以上的GC延迟;而存在大量go出协程的服务,1ms以上的GC延迟经常出现,甚至有50-100ms区间的延迟。
可见,go出协程虽然很爽,仍然要慎用。