理解Go 1.13中sync.Pool的设计与实现
Go 1.13版本中有几个比较大的修改,其中之一是sync.Pool修改了部分实现,减小某些极端情况下的性能开销。文中内容来源于笔者读完sync.Pool源代码的思考和总结,内容以Go 1.13中的实现为准,少量内容涉及到Go 1.13之前,如有误区请读者多多指教。 概念 在本文内容开始之前需要理解几个在Go runtime中的概念,以便于更好的理解sync.Pool中一些实现。 goroutine抢占 Go中调度器是GMP模型,简单理解G就是goroutine;M可以类比内核线程,是执行G的地方;P是调度G以及为G的执行准备所需资源。一般情况下,P的数量CPU的可用核心数,也可由runtime.GOMAXPROCS指定。本文的重点并非goroutine调度器,在此不做详细解释,感兴趣可以翻...阅读全文