当前位置:首页 > 开发 > 开源软件 > 正文

Ngx_lua与go高并发性能对比

发表于: 2015-05-06   作者:ronin47   来源:转载   浏览次数:
摘要: Ngx_lua与go高并发性能对比 JAN 28TH, 2013 LANGUAGE POSTED BY LIFEIBO | 1 COMMENT nginx在处理高并发能力上非常出色,而go作为新时代互联网语言,在设计之初就为实现高并发。 ngx_lua由nginx来处理网络事件,并使用协程来实现非阻塞,从而实现高并发。 go语言级别提供非阻

Ngx_lua与go高并发性能对比

JAN 28TH, 2013 LANGUAGE  | 1 COMMENT

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

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

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

ngx_lua:Tengine/1.4.3+luajit+ngx_lua
go: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进行测试,测试结果如下:

短连接 100 200 500 1000 2000
ngx_lua qps:17329 us:2.6% sy:2.2% 17744 16443 15852 13589
go qps:16538 us:9.1% sy:3.6% 16546 15988 15032 13757
长连接 100 200 500
ngx_lua qps:72274 us:13.8% sy:8.5 61204 61983
go qps:39072 us:29% sy:15% 38688 38238

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

相关测试代码。

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))
}

Ngx_lua与go高并发性能对比

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
一. 概述 Nginx是一个高性能,支持高并发的,轻量级的web服务器。目前,Apache依然web服务器中的老
1.负载均衡,加服务器分流 1)nginx做负载服务器,分发处理请求,ip_hash依据ip定位服务器,防止ses
Go Web编程(Go语言性能好、语法简单、开发效率高!) 谢孟军 著 ISBN 978-7-121-20091-5 2013年6月
Go Web编程(Go语言性能好、语法简单、开发效率高!) 谢孟军 著 ISBN 978-7-121-20091-5 2013年6月
http://www.it168.com/redian/12306hpc/  【IT168 专稿】在2011年与2012年的新旧交替之际,铁道部
System.currentTimeMillis()的调用比new一个普通对象要耗时的多(具体耗时高出多少我还没测试过,有
垂直扩展 垂直扩展是一种用于增加单个ActiveMQ代理连接数(因而也增加了负载能力)的技术.默认情况下,
去年的时候,曾经简单对比了一下golang和nodejs的http模块的性能,见: golang与node.js的http对比
去年的时候,曾经简单对比了一下golang和nodejs的http模块的性能,见: golang与node.js的http对比
当被问到为什么用Go语言,一定不得不提的是Go语言的并发程序编写。在C语言中编写非常繁琐复杂的并发
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号