模擬一下協(xié)程數(shù)量太多的危害:
func main() {
number := math.MaxInt64
for i := 0; i < number; i++ {
go func(i int) {
// 做一些業(yè)務(wù)邏輯處理
fmt.Printf("go func: %d\n", i)
time.Sleep(time.Second)
}(i)
}
number過(guò)大,服務(wù)器系統(tǒng)資源利用率不斷上漲恬口,到最后程序自動(dòng)killed
協(xié)程池解決勇垛?
池化要解決的問(wèn)題①是頻繁創(chuàng)建的開(kāi)銷(xiāo)俭厚,②是在等待時(shí)占用的資源世吨。
goroutine沒(méi)必要協(xié)程池澡刹!原因如下:
- goroutine 和普通線程相比,創(chuàng)建和調(diào)度都不需要進(jìn)入內(nèi)核耘婚,也就是創(chuàng)建的開(kāi)銷(xiāo)已經(jīng)解決了罢浇。同時(shí)
- 相比系統(tǒng)線程,內(nèi)存占用也是輕量的沐祷。所以池化技術(shù)要解決的問(wèn)題goroutine 都不存在