大家都知道goroutine 是 Go語言中的輕量級線程實現(xiàn),由 Go 運(yùn)行時(runtime)管理,Go 程序會智能地將 goroutine 中的任務(wù)合理地分配給每個 CPU。創(chuàng)建一個goroutine大小大概在2k左右,可以說非常的節(jié)省機(jī)器資源。
但是為什么要用池化的方式呢?機(jī)器資源總是有限的,如果創(chuàng)建了幾十萬個goroutine,那么就消耗比較大了,在一些需要對并發(fā)資源進(jìn)行控制、提升性能、控制生命周期的場景中,還是需要用到協(xié)程池去處理。
今天就介紹在Github用Go語言實現(xiàn)的有 11.5k?的 Ants 協(xié)程池庫的實現(xiàn)!
圖片
初識Ants
Ants介紹
Go的協(xié)程非常輕量,但是在超高并發(fā)場景,每個請求創(chuàng)建一個協(xié)程也是低效的,一個簡單的思想就是協(xié)程池。
Ants實現(xiàn)了一個具有固定容量的goroutine池,管理和回收大量goroutine,允許開發(fā)人員限制并發(fā)程序中的goroutines數(shù)量。
圖片
Github地址:https://github.com/panjf2000/ants
這是在github上的截圖,注意不同版本之間代碼實現(xiàn)會略有差異。
圖片