文档章节

golang vs dlang vs nodejs vs php 性能对比较量

冰力
 冰力
发布于 2015/11/13 16:07
字数 1325
阅读 2353
收藏 3

这是我本机开的一个单核1G内存的Hyper-V虚拟机,首先我们使用的语言和框架版本给大家看一下:

root@kerisy:/home/zoujiaqing# go version
go version go1.5.1 linux/amd64
root@kerisy:/home/zoujiaqing# ldc2 --version
LDC - the LLVM D compiler (0.15.0):
  based on DMD v2.066.1 and LLVM 3.5.0
  Default target: x86_64-pc-linux-gnu
  Host CPU: core-avx2
  http://dlang.org - http://wiki.dlang.org/LDC

  Registered Targets:
    aarch64    - AArch64 (little endian)
    aarch64_be - AArch64 (big endian)
    arm        - ARM
    arm64      - AArch64 (little endian)
    arm64_be   - AArch64 (big endian)
    armeb      - ARM (big endian)
    cpp        - C++ backend
    hexagon    - Hexagon
    mips       - Mips
    mips64     - Mips64 [experimental]
    mips64el   - Mips64el [experimental]
    mipsel     - Mipsel
    msp430     - MSP430 [experimental]
    nvptx      - NVIDIA PTX 32-bit
    nvptx64    - NVIDIA PTX 64-bit
    ppc32      - PowerPC 32
    ppc64      - PowerPC 64
    ppc64le    - PowerPC 64 LE
    r600       - AMD GPUs HD2XXX-HD6XXX
    sparc      - Sparc
    sparcv9    - Sparc V9
    systemz    - SystemZ
    thumb      - Thumb
    thumbeb    - Thumb (big endian)
    x86        - 32-bit X86: Pentium-Pro and above
    x86-64     - 64-bit X86: EM64T and AMD64
    xcore      - XCore
root@kerisy:/home/zoujiaqing# nodejs
nodejs
root@kerisy:/home/zoujiaqing# nodejs --version
v4.2.2
root@kerisy:/home/zoujiaqing# php --version
PHP 5.6.14-1 (cli) 
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, by Zend Technologies


可以看到对应的版本:

golang: 1.5.1

dlang(ldc2): 2.066.1

nodejs: 4.2.2

php: 4.6.14


golang代码:

package main

import (
        "io"
        "net/http"
        "log"
)
func HelloServer(w http.ResponseWriter, req *http.Request) {
        io.WriteString(w, "hello, world!\n")
}
func main() {
        http.HandleFunc("/hello", HelloServer)
        err := http.ListenAndServe(":1234", nil)
        if err != nil {
                log.Fatal("ListenAndServe: ", err)
        }
}

dlang代码:

import std.stdio;

import kerisy.http.server;
import kerisy.utils;
import kerisy.net;

int main (string[] args)
{
	Address address = Address("0.0.0.0", 9999);

	HTTPServer server = new HTTPServer;
	server.listen(address);

	return 0;
}

nodejs代码:

var http = require('http');
var url = require('url');

http.createServer(function (req, res) {
      var path = url.parse(req.url).pathname;
        var dt=new Date();
        res.writeHead(200, {'Content-Type': 'text/plain'});
        res.write("Hello,World ! \n"+dt.getTime());
        res.end();}).listen(8888, "127.0.0.1");

php代码:

#! /usr/bin/env php
<?php

require __DIR__ . '/vendor/autoload.php';

$app = require_once __DIR__ . '/application/bootstrap.php';

$status = $app->handleConsole(
    new Symfony\Component\Console\Input\ArgvInput,
    new Symfony\Component\Console\Output\ConsoleOutput
);

exit($status);


运行结果如下:

root@kerisy:/home/zoujiaqing# ab -n 10000 -c 1000 http://127.0.0.1:9999/
This is ApacheBench, Version 2.3 <$Revision: 1706008 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 127.0.0.1 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        
Server Hostname:        127.0.0.1
Server Port:            9999

Document Path:          /
Document Length:        15 bytes

Concurrency Level:      1000
Time taken for tests:   0.760 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      1170000 bytes
HTML transferred:       150000 bytes
Requests per second:    13152.77 [#/sec] (mean)
Time per request:       76.030 [ms] (mean)
Time per request:       0.076 [ms] (mean, across all concurrent requests)
Transfer rate:          1502.81 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    2   5.0      1      25
Processing:     2   12   6.9     10     215
Waiting:        2   10   6.5      9     213
Total:          3   15   9.9     11     217

Percentage of the requests served within a certain time (ms)
  50%     11
  66%     14
  75%     17
  80%     19
  90%     23
  95%     42
  98%     45
  99%     48
 100%    217 (longest request)
root@kerisy:/home/zoujiaqing# ab -n 10000 -c 1000 http://127.0.0.1:1234/
This is ApacheBench, Version 2.3 <$Revision: 1706008 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 127.0.0.1 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        
Server Hostname:        127.0.0.1
Server Port:            1234

Document Path:          /
Document Length:        19 bytes

Concurrency Level:      1000
Time taken for tests:   1.039 seconds
Complete requests:      10000
Failed requests:        0
Non-2xx responses:      10000
Total transferred:      1760000 bytes
HTML transferred:       190000 bytes
Requests per second:    9622.04 [#/sec] (mean)
Time per request:       103.928 [ms] (mean)
Time per request:       0.104 [ms] (mean, across all concurrent requests)
Transfer rate:          1653.79 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   18  17.6     16      50
Processing:     0   28  18.4     24     217
Waiting:        0   22  13.3     19     217
Total:          0   46  33.6     46     217

Percentage of the requests served within a certain time (ms)
  50%     46
  66%     60
  75%     75
  80%     84
  90%     95
  95%     99
  98%    112
  99%    117
 100%    217 (longest request)
root@kerisy:/home/zoujiaqing# ab -n 10000 -c 1000 http://127.0.0.1:8888/
This is ApacheBench, Version 2.3 <$Revision: 1706008 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 127.0.0.1 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        
Server Hostname:        127.0.0.1
Server Port:            8888

Document Path:          /
Document Length:        28 bytes

Concurrency Level:      1000
Time taken for tests:   1.827 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      1290000 bytes
HTML transferred:       280000 bytes
Requests per second:    5474.02 [#/sec] (mean)
Time per request:       182.681 [ms] (mean)
Time per request:       0.183 [ms] (mean, across all concurrent requests)
Transfer rate:          689.60 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   13 113.4      0     998
Processing:    12   24  30.8     20     428
Waiting:       12   24  30.8     20     428
Total:         12   38 136.7     20    1425

Percentage of the requests served within a certain time (ms)
  50%     20
  66%     22
  75%     24
  80%     25
  90%     28
  95%     32
  98%     61
  99%   1026
 100%   1425 (longest request)
root@kerisy:/home/zoujiaqing# ab -n 10000 -c 1000 http://127.0.0.1:8080/
This is ApacheBench, Version 2.3 <$Revision: 1706008 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 127.0.0.1 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        swoole-http-server
Server Hostname:        127.0.0.1
Server Port:            8080

Document Path:          /
Document Length:        12 bytes

Concurrency Level:      1000
Time taken for tests:   1.466 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      1600000 bytes
HTML transferred:       120000 bytes
Requests per second:    6819.48 [#/sec] (mean)
Time per request:       146.639 [ms] (mean)
Time per request:       0.147 [ms] (mean, across all concurrent requests)
Transfer rate:          1065.54 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       23   59  11.5     60      89
Processing:    24   84  23.3     79     156
Waiting:       20   60  15.2     59     110
Total:         82  143  24.4    139     207

Percentage of the requests served within a certain time (ms)
  50%    139
  66%    150
  75%    155
  80%    160
  90%    174
  95%    191
  98%    204
  99%    205
 100%    207 (longest request)

按照这个ab测试结果来看性能最差的是nodejs,最好的是dlang的框架,其次是golang的http模块,php的worker框架性能还是可以的,相信php7出来以后还能有很多提升。

golang:  9622 qps

dlang: 13152 qps

nodejs: 5474 qps

php: 6819 qps

© 著作权归作者所有

冰力

冰力

粉丝 42
博文 9
码字总数 3983
作品 5
闵行
CTO(技术副总裁)
私信 提问
加载中

评论(4)

loveward
loveward
带上-k的参数,差距是另外一个世界
韭精过敏
韭精过敏
dlang 没输出?
缺Q德
缺Q德
PHP那代码?
Alex-loongkylin
Alex-loongkylin
给力!我也跟你学D
巨头终极对决,Apache、Nginx 与 Node.js 之争

巨头之间的终极对决:崛起的新星 Node.js 能否战胜巨人 Apache 和 Nginx?WordPress 与 Ghost 的性能大对决! 我和你一样,都阅读过大量散布在互联网各处的意见或事实,其中有一些我认为是可...

局长
2016/12/02
13.6K
37
【go学习笔记1】为什么go

先来个wiki上关于go的解释: Go是Google开发的一种编译型,並發型,并具有垃圾回收功能的编程语言。 罗伯特·格瑞史莫(Robert Griesemer),罗勃·派克(Rob Pike)及肯·汤普逊于2007年9月...

kingzeus
2014/01/25
0
0
Node.js VS PHP:Web 开发的史诗级对决,你支持谁?

现在,Web开发公司和开发人员可以选择多种技术栈来构建Web应用程序。早期网络发展,不同的技术被用于前端和后端开发。但是,随着Node.js的发布,布局发生了变化,因为它允许开发人员使用 Ja...

uzv80px5v412ne
2017/12/29
0
0
swoole-1.7.7 发布,Http 服务器性能大幅提升

swoole-1.7.7 发布,内置Http服务器性能是Node.js的12倍 PHP的异步并发扩展swoole发布了 1.7.7 版本,此版本主要有: 增加对cygwin环境的支持 增加单次定时器的after接口 onClose事件调整为在...

matyhtf
2014/10/28
9.5K
65
koahubjs 1.0.0 发布,基于 Koa.js 快速开发框架

koahubjs 发布 1.0.0 正式版,基于 Koa.js 的快速开发框架。 KoaHub.js -- 基于 Koa.js 平台的 Node.js web 快速开发框架。可以直接在项目里使用 ES6/7(Generator Function, Class, Async ...

einsqing
2017/01/07
1K
6

没有更多内容

加载失败,请刷新页面

加载更多

程序设计基础(C)第06讲例程

1summing.c /* summing.c -- 根据用户键入的整数求和 */#include <stdio.h>int main(void){ long num; long sum = 0L; /* 把sum 初始化为0 */ int status; p......

树人大学数字媒体吴凡
8分钟前
3
0
聊聊nacos config的publishConfig

序 本文主要研究一下nacos config的publishConfig ConfigController nacos-1.1.3/config/src/main/java/com/alibaba/nacos/config/server/controller/ConfigController.java @Controller@R......

go4it
35分钟前
3
0
Eureka应用注册与集群数据同步源码解析

在之前的EurekaClient自动装配及启动流程解析一文中我们提到过,在构造DiscoveryClient类时,会把自身注册到服务端,本文就来分析一下这个注册流程 客户端发起注册 boolean register() t...

Java学习录
44分钟前
11
0
Java描述设计模式(15):责任链模式

本文源码:GitHub·点这里 || GitEE·点这里 一、生活场景描述 1、请假审批流程 公司常见的请假审批流程:请假天数 当 day<=3 天,项目经理审批当 3<day<=5 天,部门经理审批当 day>5 天...

知了一笑
55分钟前
10
0
总结:数组与链表

1、内存申请:数组在内存上是连续的空间;链表,内存地址上可以是不连续的。 2、查询速度:数组可以随机访问,链表必须顺序访问,即从首个元素开始遍历,逐个查找,所以数组查询很快。 3、写入...

浮躁的码农
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部