鍍金池/ 問答/GO/ 關(guān)于golang http server的疑問

關(guān)于golang http server的疑問

我看net/http中每一個,客戶端請求由一個獨立的goroutine處理

問題是,這個goroutine數(shù)量是否有限制,如何在允許的情況下,最大的增強它的處理并發(fā)請求的能力

回答
編輯回答
荒城

正好,先說說goroutine吧。之前我寫goroutine池grpool這個包的時候?qū)iT對原生goroutine和grpool進行過性能測試,先發(fā)性能測試的結(jié)果吧:http://johng.cn/grpool-perfor... 可以看得出來,對性能要求比較高的地方,直接使用原生的goroutine也是比較吃力的,因為其底層沒有使用池化設(shè)計,在IO復用設(shè)計上有進一步的提升空間,原生goroutine在高并發(fā)場景下,CPU及內(nèi)存消耗都比較大。

再說說標準庫的http server,以上看得出來標準庫的http包也有類似的缺陷。其實已經(jīng)有老外在github上開源了一個號稱比標準庫更快的http server,項目地址:https://github.com/valyala/fa...,底層設(shè)計也就是增加了goroutine池而已。

golang本身沒有對goroutine數(shù)量做限制,但是系統(tǒng)對最大文件打開數(shù)是有限制的,由于golang在一個系統(tǒng)線程中可能會運行多個goroutine,所以具體限制數(shù)量不好評判。建議也不必做過多關(guān)心,適合的業(yè)務(wù)場景中充分使用goroutine池是提高性能及增強并發(fā)處理能力的最好選擇。

2017年9月10日 09:09