随笔-121  评论-1534  文章-1  trackbacks-99

golang与node.js的http对比测试

听说Go是很不错的语言,了解了一下,一些特性确实很不错。

顺便测试了一下http与node.js的性能对比。

go的代码:

image
(注:是用8g, 8l编译的)

node.js的代码:

image

ab测试结果:

==** GO **==

$ ab -c 100 -n 1000 http://127.0.0.1:8080/
This is ApacheBench
, Version 2.3 <$Revision: 655654 $>

Server Software:
Server Hostname:
127.0.0.1
Server Port:
8080

Document
Path: /
Document Length:
1 bytes

Concurrency Level:
100
Time taken for tests: 0.322 seconds
Complete requests:
1000
Failed requests:
0
Write errors:
0
Total transferred:
97000 bytes
HTML transferred:
1000 bytes
Requests per second:
3105.62 [#/sec] (mean)
Time per request: 32.200 [ms] (mean)
Time per request: 0.322 [ms] (mean, across all concurrent requests)
Transfer rate:
294.18 [Kbytes/sec] received

Connection Times
(ms)
min mean[
+/-sd] median max
Connect:
0 0 0.7 0 3
Processing:
1 30 10.5 29 55
Waiting:
1 30 10.5 29 55
Total:
4 30 10.1 29 55

==** Node.js **==

$ ab -c 100 -n 1000 http://127.0.0.1:8080/
This is ApacheBench
, Version 2.3 <$Revision: 655654 $>

Server Software:
Server Hostname:
127.0.0.1
Server Port:
8080

Document
Path: /
Document Length:
12 bytes

Concurrency Level:
100
Time taken for tests: 0.143 seconds
Complete requests:
1000
Failed requests:
0
Write errors:
0
Total transferred:
50000 bytes
HTML transferred:
12000 bytes
Requests per second:
6993.50 [#/sec] (mean)
Time per request: 14.299 [ms] (mean)
Time per request: 0.143 [ms] (mean, across all concurrent requests)
Transfer rate:
341.48 [Kbytes/sec] received

Connection Times
(ms)
min mean[
+/-sd] median max
Connect:
0 0 1.1 0 4
Processing:
2 13 6.6 13 30
Waiting:
2 13 6.6 13 30
Total:
2 14 6.4 14 30

webbench测试结果

==** GO **==

$ webbench -t 30 -c 100 http://127.0.0.1:8080/
Webbench - Simple Web Benchmark
1.5
Copyright
(c) Radim Kolar 1997-2004, GPL Open Source Software.

Benchmarking: GET http:
//127.0.0.1:8080/
100 clients, running 30 sec.

Speed
=146934 pages/min, 262032 bytes/sec.
Requests:
73467 susceed, 0 failed.

==** Node.js **==

$ webbench -t 30 -c 100 http://127.0.0.1:8080/
Webbench - Simple Web Benchmark
1.5
Copyright
(c) Radim Kolar 1997-2004, GPL Open Source Software.

Benchmarking: GET http:
//127.0.0.1:8080/
100 clients, running 30 sec.

Speed
=485128 pages/min, 404273 bytes/sec.
Requests:
242564 susceed, 0 failed.

从测试结果来看,node.js的HTTP SERVER性能是Go的两倍还多,而且让我比较郁闷的是,在用webbench进行测试的时候,可以看到go是用了我的笔记本上的四个核的CPU的,而node.js当然是只跑在一个核上,而Go居然还比node.js慢这么多。

然后我google,就看到:golang helloworld 45% slower than node.js

求真相!

作者:QLeelulu Follow QLeelulu on Twitter
出处:http://QLeelulu.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利
标签: node.js, golang
posted on 2011-09-07 19:46 Q.Lee.lulu 阅读(1533) 评论(6) 编辑 收藏

评论:
#1楼 2011-09-08 14:34 | MK2      
呃,求真相。。。
 回复 引用 查看   
#2楼 2011-09-09 15:04 | palapi[未注册用户]
Hi,

在您的Go例子,你可以尝试添加goroutine功能。

我是一个Go新手,但我认为你可能会尝试在http.HandleFunc前面添加 "go". Node.js的怎么样处理它的I / O进程到另一个进程。

文件上 goroutine
http://golangtutorials.blogspot.com/2011/06/goroutines.html

<从英语翻译>

 回复 引用   
#3楼[楼主] 2011-09-09 18:27 | Q.Lee.lulu      
@palapi
额,这里和goroutine无关

 回复 引用 查看   
#4楼 2011-09-11 13:47 | ekloading[未注册用户]
异步 非阻塞的好处就在这里
go目前还没有异步


 回复 引用   
#5楼 2011-12-10 20:05 | jaryway      
博主你好,之前看了你写的mvc入门教程系列的文章。现在在做mvc项目中遇到以下问题。希望博主能给与解答。
问题是这样的。我做了一个有管理员后台的网站,管理员后台是放在admin区域中的。
首先我注册了一个区域Admin。
管理的所以操作都在这个区域里
目录为

现在我想实现这样一个功能。
当我输入url地址为:
localhost:80/admin时能匹配到
localhost:80/admin/home/index
这个要怎么做呢?
郁闷先我输入localhost:80/admin/时他没有到AdminArea中去找Controller?
难道mvc的routting不能做到这样的效果?

 回复 引用 查看   
#6楼 2011-12-10 20:10 | jaryway      
但是当我输入
localhost:80/admin/home时,却可以找到admin区域下homecontroller的
 public class AdminAreaRegistration : AreaRegistration
    {
        public override string AreaName
        {
            get
            {
                return "Admin";
            }
        }

        public override void RegisterArea(AreaRegistrationContext context)
        {
            context.MapRoute(
                "Admin_default1",
                "Admin/*",
                new { controllr = "Home", action = "List", id = UrlParameter.Optional },
                new string[] { "Lvegu.Web.Areas.Admin.Controllers" }
            );
            context.MapRoute(
                "Admin_default",
                "Admin/{controller}/{action}/{id}",
                new { controllr = "Home", action = "List", id = UrlParameter.Optional },
                new string[] { "Lvegu.Web.Areas.Admin.Controllers" }
            );
        }
    }

我是注册了一个admin区域,并给了默认的controller,和默认的Action
按理来说如果我的url为localhost:80/admin的时候应该可以匹配上
localhost:80/admin/home/index呀 难道mvc的区域有什么特别?

 回复 引用 查看   
发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 2170204 b3zxokvk+OE=
昵称: lulu
网名: QLeelulu
大学: GDUT
城市: 广州=>珠海
职业: 打字员
CO. : PowerEasy => KingSoft
Mail: QLeelulu@163(gmail).com

Who Am I ?


Follow QLeelulu on Twitter
交流群 ASP.NET MVC交流群:
QQ群:1215279(满)
2群:1214648(满)
3群:47788243
(加的时候请注明)



昵称:Q.Lee.lulu
园龄:4年4个月
荣誉:推荐博客
粉丝:322
关注:7
<2011年9月>
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678

搜索

 

常用链接

我的标签

随笔分类

随笔档案

.NET 资源

PowerEasy

我的好友

积分与排名

  • 积分 - 734675
  • 排名 - 65

最新评论

阅读排行榜

评论排行榜

推荐排行榜