发现一个现象:golang中大量的go出新协程,必然在GC统计中出现1ms以上的GC延迟

结论:协程池还是有必要的,能够有效减小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出协程虽然很爽,仍然要慎用。

原文地址:https://www.cnblogs.com/ahfuzhang/p/13526021.html