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