golang vs dlang vs nodejs vs php

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

[email protected]:/home/zoujiaqing# go version
go version go1.5.1 linux/amd64
[email protected]:/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
[email protected]:/home/zoujiaqing# nodejs
nodejs
[email protected]:/home/zoujiaqing# nodejs --version
v4.2.2
[email protected]:/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);

运行结果如下:

[email protected]:/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)
[email protected]:/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)
[email protected]:/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)
[email protected]:/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

时间: 2024-12-25 22:45:47

golang vs dlang vs nodejs vs php的相关文章

2016年的流水帐

最近过的还是很充实的,昨天用after effects帮别人处理掉周年庆视频里面蛋糕上的黑斑,算是入了ae的门. 前天到上周,将之前的一个游戏整理了一下,发布到4399和facebook,后续有把游戏打包到安卓市场的安排. 再之前就是适用sketch画模型,导出dae之后再three.js里面使用:还有反编译了一个伪3d游戏的swf资源. 今天的话主要是花了一点点时间把4399的小游戏版本更新了一下,然后上午拼了一会儿ui, 下午使用nodejs初步的爬取和解析了某个网站,打算做个统计类的页面.

熊猫直播Rancho发布系统构建之路

作者介绍 符杰超,熊猫直播基础架构部高级运维开发工程师.主要负责熊猫直播运维自动化架构平台建设和开发 前言 随着熊猫直播的业务发展越来越快,业务需求的迭代和版本更新需求越来越多,对开发和运维面临以下4个痛点: 项目需求上线越来越多 发布周期比较长,人工操作比较繁琐 发布项目效率和风险的问题,比如平滑发布,切换负载均衡 发布过程没有详细的审计功能 由此,团队内部决定在现有的发布过程上实现开发统一的发布系统平台,实现熊猫直播的运维发布流程化.标准化.自动化为一体的统一发布要求. 下面围绕整个Ranc

读我编程,我快乐:程序员职业规划之道 第一章 选择市场

职业规划,从大学开始,很少考虑这个事情,大四那会儿还学过相关的一门课,当时也只是抱着学分修修到的心态.最近一年里开始思考这个问题,近期阅读了这本<我编程,我快乐:程序员职业规划之道>,开始学习着规划自己的职业.这本书不仅适合程序员,也适合其他职业. 准备按照章节摘抄出一些觉得有用的.引人思考的片段和一些有趣的练习题,再附加自己的感想. 在<程序员修炼之道>一书中,Dave Thomas和Andy Hunt谈到了编程中的偶然性:当你开始做一个程序的时候,或许手头上有一个从网上复制的示

PalletOne调色板Token PTN跨链转网的技术原理

之前一直在忙于通用跨链公链PalletOne的研发,没有怎么做技术分享的博客,最近PalletOne主网上线也有几个月的时间了,即将进行PTN(PalletOne上面的主Token)从ERC20到主网的转网工作.在转网进行时,正好将这其中的技术原理与大家分享. 一.Token转网的方式 因为ERC20同质化通证标准的流行,大量区块链项目都是通过先在以太坊上以ERC20的形式发行Token,进行募资.糖果发放.Token买卖等,等到自己的主链研发完成,就会将ERC20上的Token销毁或者冻结,而

关于协程:nodejs和golang协程的不同

nodejs和golang都是支持协程的,从表现上来看,nodejs对于协程的支持在于async/await,golang对协程的支持在于goroutine.关于协程的话题,简单来说,可以看作是非抢占式的轻量级线程. 协程本身 一句话概括,上面提到了 "可以看作是非抢占式的轻量级线程". 在多线程中,把一段代码放在一个线程中执行,cpu会自动将代码分成碎片,并在一定时间切换cpu控制权,线程通过锁机制确保自己使用的资源在cpu执行别的线程的代码时被修改(占用的内存堆栈.硬盘数据资源等)

2017年的golang、python、php、c++、c、java、Nodejs性能对比[续]

2017年的golang.python.php.c++.c.java.Nodejs性能对比[续] 最近忙,这个话题放了几天,今天来个续集.   上篇传送门: 2017年的golang.python.php.c++.c.java.Nodejs性能对比(golang python php c++ java Nodejs Performance)   好了,上回的某些事有些人有异议,今天也回应下. 1.有人说python性能没那么Low? 这个我用pypy 2.7确认了下,确实没那么差, 如果用num

zeromq:c,c++,golang及nodejs使用

官网:www.zeromq.org 消息队列比较:http://www.cnblogs.com/charlesblc/p/6058799.html zeromq的一些观点:http://www.cnblogs.com/my_life/articles/5293176.html 1.ZeroMQ是一个程序库,rabbitmq则是消息服务器2.ZeroMQ是面向消息,而socket是面向字节流,zeromq本身会保证消息完整性3.zeromq你不必考虑I/O与程序阻塞.异步这些麻烦事,zeromq使

2017年的golang、python、php、c++、c、java、Nodejs性能对比(golang python php c++ java Nodejs Performance)

2017年的golang.python.php.c++.c.java.Nodejs性能对比 本人在PHP/C++/Go/Py时,突发奇想,想把最近主流的编程语言性能作个简单的比较, 至于怎么比,还是不得不用神奇的斐波那契算法.可能是比较常用或好玩吧. 好了,talk is cheap, show me your code!  打开Mac,点开Clion开始Coding吧! 1.怎么第一是Go呢,因为我个人最近正在用,感觉很不错 package main import "fmt" fun

electron/nodejs实现调用golang函数

https://www.jianshu.com/p/a3be0d206d4c 思路 golang 支持编译成c shared library, 也就是系统中常见的.so(windows下是dll)后缀的动态链接库文件. c++可以调用动态链接库,所以基本思路是golang开发主要功能, c++开发插件包装golang函数,实现中转调用 对于类型问题, 为了方便处理, 暴露的golang函数统一接受并返回字符串, 需要传的参数都经过json编码, 返回值亦然. 这里实现了3种调用方式, 同步调用,