Ngx_lua與go高并發(fā)性能對(duì)比
Nginx在處理高并發(fā)能力上非常出色,而go作為新時(shí)代互聯(lián)網(wǎng)語(yǔ)言,在設(shè)計(jì)之初就為實(shí)現(xiàn)高并發(fā)。
ngx_lua由Nginx來(lái)處理網(wǎng)絡(luò)事件,并使用協(xié)程來(lái)實(shí)現(xiàn)非阻塞,從而實(shí)現(xiàn)高并發(fā)。 go語(yǔ)言級(jí)別提供非阻塞的api,同樣使用協(xié)程來(lái)提供高并發(fā)處理。
我們來(lái)測(cè)試對(duì)比一下兩者的性能。
ngx_lua:Tengine/1.4.3+luajit+ngx_lua go:go1.0.3
分別實(shí)現(xiàn)512字節(jié)的內(nèi)容的輸出,對(duì)比在不同并發(fā)下的qps。
測(cè)試機(jī)器:
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進(jìn)行測(cè)試,測(cè)試結(jié)果如下:
從結(jié)果中,可以看出短連接時(shí),兩者qps相差不大,而長(zhǎng)連接時(shí),兩者相差較大。go的cpu占用比ngx_lua要高不少。另外,go在并發(fā)數(shù)增加的情況下,性能依然出色。
相關(guān)測(cè)試代碼。
lua代碼:
ngx.print("aaaaa...512...aaa")
go 代碼:
package main
import (
    "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))
}

















 
 
 












 
 
 
 