這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
Nginx在處理高並發能力上非常出色,而go作為新時代互連網語言,在設計之初就為實現高並發。ngx_lua由Nginx來處理網路事件,並使用協程來實現非阻塞,從而實現高並發。 go語言層級提供非阻塞的api,同樣使用協程來提供高並發處理。
我們來測試對比一下兩者的效能。
ngx_lua:Tengine/1.4.3+luajit+ngx_luago:go1.0.3
分別實現512位元組的內容的輸出,對比在不同並發下的qps。
測試機器:
16core Intel(R) Xeon(R) CPU E5520 @ 2.27GHz Linux localhost 2.6.18-164.el5 #1 SMP Tue Aug 18 15:51:48 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux
使用ab進行測試,測試結果如下:
從結果中,可以看出短串連時,兩者qps相差不大,而長串連時,兩者相差較大。go的cpu佔用比ngx_lua要高不少。另外,go在並發數增加的情況下,效能依然出色。
相關測試代碼。
lua代碼:
ngx.print("aaaaa...512...aaa")
go 代碼:
package mainimport ( "net/http" "log" "fmt" "runtime")func handler512(w http.ResponseWriter, r *http.Request) { w.Header().Set("Connection", "keep-alive") a := []byte("aaaaa...512...aaa") w.Header().Set("Content-Length", fmt.Sprintf("%d", len(a))) w.Write(a)}func main() { runtime.GOMAXPROCS(runtime.NumCPU()) http.HandleFunc("/512b", handler512) log.Fatal(http.ListenAndServe(":8080", nil))}
link: http://os.51cto.com/art/201307/403474.htm