Ngx_lua与go高并发性能对比

运维 系统运维
Nginx在处理高并发能力上非常出色,而go作为新时代互联网语言,在设计之初就为实现高并发。ngx_lua由Nginx来处理网络事件,并使用协程来实现非阻塞,从而实现高并发。 go语言级别提供非阻塞的api,同样使用协程来提供高并发处理。

Nginx在处理高并发能力上非常出色,而go作为新时代互联网语言,在设计之初就为实现高并发。

ngx_lua由Nginx来处理网络事件,并使用协程来实现非阻塞,从而实现高并发。 go语言级别提供非阻塞的api,同样使用协程来提供高并发处理。

我们来测试对比一下两者的性能。

ngx_lua:Tengine/1.4.3+luajit+ngx_lua
go:go1.0.3
  • 1.
  • 2.

分别实现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
  • 1.
  • 2.

使用ab进行测试,测试结果如下:

 

从结果中,可以看出短连接时,两者qps相差不大,而长连接时,两者相差较大。go的cpu占用比ngx_lua要高不少。另外,go在并发数增加的情况下,性能依然出色。

相关测试代码。

lua代码:

ngx.print("aaaaa...512...aaa")
  • 1.

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))
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.

 

责任编辑:黄丹 来源: lifeibo.com
相关推荐

2015-03-10 18:13:08

2011-08-25 17:29:40

LUAPHPWEB

2019-12-25 09:49:12

WebKitWindowsChrome

2025-02-26 03:00:00

2024-02-19 00:00:00

JavaScriptJavaPython

2011-08-05 13:41:46

Go

2017-04-13 15:15:17

Netflix ZuuNginx性能

2009-11-20 09:01:13

Ubuntu性能对比

2024-12-26 09:15:28

2017-11-21 15:50:09

FlinkStorm性能

2017-11-20 13:54:55

FlinkStorm框架

2014-05-20 16:27:35

JVMScala

2024-01-05 08:46:50

ReactVue

2019-12-25 09:53:01

虚拟机技术固态硬盘

2024-10-09 11:31:51

2023-04-09 16:34:49

JavaSemaphore开发

2019-09-24 13:53:19

MySQLMySQL 8.0数据库

2012-07-13 10:57:46

Nginxlua

2022-01-17 15:43:04

Go 并行性并发性

2010-01-16 11:02:12

Ubuntu性能测试
点赞
收藏

51CTO技术栈公众号