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

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

root@kerisy:/home/zoujiaqing#goversion
goversiongo1.5.1linux/amd64
root@kerisy:/home/zoujiaqing#ldc2--version
LDC-theLLVMDcompiler(0.15.0):
basedonDMDv2.066.1andLLVM3.5.0
Defaulttarget:x86_64-pc-linux-gnu
HostCPU:core-avx2
http://dlang.org-http://wiki.dlang.org/LDC

RegisteredTargets:
aarch64-AArch64(littleendian)
aarch64_be-AArch64(bigendian)
arm-ARM
arm64-AArch64(littleendian)
arm64_be-AArch64(bigendian)
armeb-ARM(bigendian)
cpp-C++backend
hexagon-Hexagon
mips-Mips
mips64-Mips64[experimental]
mips64el-Mips64el[experimental]
mipsel-Mipsel
msp430-MSP430[experimental]
nvptx-NVIDIAPTX32-bit
nvptx64-NVIDIAPTX64-bit
ppc32-PowerPC32
ppc64-PowerPC64
ppc64le-PowerPC64LE
r600-AMDGPUsHD2XXX-HD6XXX
sparc-Sparc
sparcv9-SparcV9
systemz-SystemZ
thumb-Thumb
thumbeb-Thumb(bigendian)
x86-32-bitX86:Pentium-Proandabove
x86-64-64-bitX86:EM64TandAMD64
xcore-XCore
root@kerisy:/home/zoujiaqing#nodejs
nodejs
root@kerisy:/home/zoujiaqing#nodejs--version
v4.2.2
root@kerisy:/home/zoujiaqing#php--version
PHP5.6.14-1(cli)
Copyright(c)1997-2015ThePHPGroup
ZendEnginev2.6.0,Copyright(c)1998-2015ZendTechnologies
withZendOPcachev7.0.6-dev,Copyright(c)1999-2015,byZendTechnologies


可以看到对应的版本:

golang: 1.5.1

dlang(ldc2): 2.066.1

nodejs: 4.2.2

php: 4.6.14


golang代码:

packagemain

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

dlang代码:

importstd.stdio;

importkerisy.http.server;
importkerisy.utils;
importkerisy.net;

intmain(string[]args)
{
	Addressaddress=Address("0.0.0.0",9999);

	HTTPServerserver=newHTTPServer;
	server.listen(address);

	return0;
}

nodejs代码:

varhttp=require('http');
varurl=require('url');

http.createServer(function(req,res){
  varpath=url.parse(req.url).pathname;
vardt=newDate();
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/envphp
<?php

require__DIR__.'/vendor/autoload.php';

$app=require_once__DIR__.'/application/bootstrap.php';

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

exit($status);


运行结果如下:

root@kerisy:/home/zoujiaqing#ab-n10000-c1000http://127.0.0.1:9999/
ThisisApacheBench,Version2.3<$Revision:1706008$>
Copyright1996AdamTwiss,ZeusTechnologyLtd,http://www.zeustech.net/
LicensedtoTheApacheSoftwareFoundation,http://www.apache.org/

Benchmarking127.0.0.1(bepatient)
Completed1000requests
Completed2000requests
Completed3000requests
Completed4000requests
Completed5000requests
Completed6000requests
Completed7000requests
Completed8000requests
Completed9000requests
Completed10000requests
Finished10000requests


ServerSoftware:
ServerHostname:127.0.0.1
ServerPort:9999

DocumentPath:/
DocumentLength:15bytes

ConcurrencyLevel:1000
Timetakenfortests:0.760seconds
Completerequests:10000
Failedrequests:0
Totaltransferred:1170000bytes
HTMLtransferred:150000bytes
Requestspersecond:13152.77[#/sec](mean)
Timeperrequest:76.030[ms](mean)
Timeperrequest:0.076[ms](mean,acrossallconcurrentrequests)
Transferrate:1502.81[Kbytes/sec]received

ConnectionTimes(ms)
minmean[+/-sd]medianmax
Connect:025.0125
Processing:2126.910215
Waiting:2106.59213
Total:3159.911217

Percentageoftherequestsservedwithinacertaintime(ms)
50%11
66%14
75%17
80%19
90%23
95%42
98%45
99%48
100%217(longestrequest)
root@kerisy:/home/zoujiaqing#ab-n10000-c1000http://127.0.0.1:1234/
ThisisApacheBench,http://www.apache.org/

Benchmarking127.0.0.1(bepatient)
Completed1000requests
Completed2000requests
Completed3000requests
Completed4000requests
Completed5000requests
Completed6000requests
Completed7000requests
Completed8000requests
Completed9000requests
Completed10000requests
Finished10000requests


ServerSoftware:
ServerHostname:127.0.0.1
ServerPort:1234

DocumentPath:/
DocumentLength:19bytes

ConcurrencyLevel:1000
Timetakenfortests:1.039seconds
Completerequests:10000
Failedrequests:0
Non-2xxresponses:10000
Totaltransferred:1760000bytes
HTMLtransferred:190000bytes
Requestspersecond:9622.04[#/sec](mean)
Timeperrequest:103.928[ms](mean)
Timeperrequest:0.104[ms](mean,acrossallconcurrentrequests)
Transferrate:1653.79[Kbytes/sec]received

ConnectionTimes(ms)
minmean[+/-sd]medianmax
Connect:01817.61650
Processing:02818.424217
Waiting:02213.319217
Total:04633.646217

Percentageoftherequestsservedwithinacertaintime(ms)
50%46
66%60
75%75
80%84
90%95
95%99
98%112
99%117
100%217(longestrequest)
root@kerisy:/home/zoujiaqing#ab-n10000-c1000http://127.0.0.1:8888/
ThisisApacheBench,http://www.apache.org/

Benchmarking127.0.0.1(bepatient)
Completed1000requests
Completed2000requests
Completed3000requests
Completed4000requests
Completed5000requests
Completed6000requests
Completed7000requests
Completed8000requests
Completed9000requests
Completed10000requests
Finished10000requests


ServerSoftware:
ServerHostname:127.0.0.1
ServerPort:8888

DocumentPath:/
DocumentLength:28bytes

ConcurrencyLevel:1000
Timetakenfortests:1.827seconds
Completerequests:10000
Failedrequests:0
Totaltransferred:1290000bytes
HTMLtransferred:280000bytes
Requestspersecond:5474.02[#/sec](mean)
Timeperrequest:182.681[ms](mean)
Timeperrequest:0.183[ms](mean,acrossallconcurrentrequests)
Transferrate:689.60[Kbytes/sec]received

ConnectionTimes(ms)
minmean[+/-sd]medianmax
Connect:013113.40998
Processing:122430.820428
Waiting:122430.820428
Total:1238136.7201425

Percentageoftherequestsservedwithinacertaintime(ms)
50%20
66%22
75%24
80%25
90%28
95%32
98%61
99%1026
100%1425(longestrequest)
root@kerisy:/home/zoujiaqing#ab-n10000-c1000http://127.0.0.1:8080/
ThisisApacheBench,http://www.apache.org/

Benchmarking127.0.0.1(bepatient)
Completed1000requests
Completed2000requests
Completed3000requests
Completed4000requests
Completed5000requests
Completed6000requests
Completed7000requests
Completed8000requests
Completed9000requests
Completed10000requests
Finished10000requests


ServerSoftware:swoole-http-server
ServerHostname:127.0.0.1
ServerPort:8080

DocumentPath:/
DocumentLength:12bytes

ConcurrencyLevel:1000
Timetakenfortests:1.466seconds
Completerequests:10000
Failedrequests:0
Totaltransferred:1600000bytes
HTMLtransferred:120000bytes
Requestspersecond:6819.48[#/sec](mean)
Timeperrequest:146.639[ms](mean)
Timeperrequest:0.147[ms](mean,acrossallconcurrentrequests)
Transferrate:1065.54[Kbytes/sec]received

ConnectionTimes(ms)
minmean[+/-sd]medianmax
Connect:235911.56089
Processing:248423.379156
Waiting:206015.259110
Total:8214324.4139207

Percentageoftherequestsservedwithinacertaintime(ms)
50%139
66%150
75%155
80%160
90%174
95%191
98%204
99%205
100%207(longestrequest)

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

golang: 9622 qps

dlang: 13152 qps

nodejs: 5474 qps

php: 6819 qps

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Golang的文档和社区资源:为什么它可以帮助开发人员快速上手?
Golang:AI 开发者的实用工具
Golang的标准库:为什么它可以大幅度提高开发效率?
Golang的部署和运维:如何将应用程序部署到生产环境中?
高性能AI开发:Golang的优势所在
本篇文章和大家了解一下go语言开发优雅得关闭协程的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。1.简介本文将介绍首先为什么需要主...
这篇文章主要介绍了Go关闭goroutine协程的方法,具有一定借鉴价值,需要的朋友可以参考下。下面就和我一起来看看吧。1.简介本文将介绍首先为什么需要主动关闭gor...
本篇文章和大家了解一下go关闭GracefulShutdown服务的几种方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。目录Shutdown方法Regi...
这篇文章主要介绍了Go语言如何实现LRU算法的核心思想和实现过程,具有一定借鉴价值,需要的朋友可以参考下。下面就和我一起来看看吧。GO实现Redis的LRU例子常
今天小编给大家分享的是Go简单实现多租户数据库隔离的方法,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会...
这篇“Linux系统中怎么安装NSQ的Go语言客户端”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希
本文小编为大家详细介绍“怎么在Go语言中实现锁机制”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么在Go语言中实现锁机制”文章能帮助大家解决疑惑,下面...
今天小编给大家分享一下Go语言中interface类型怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考
这篇文章主要介绍“怎么以正确的方式替换Go语言程序自身”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希
本文小编为大家详细介绍“Go语言中除法运算的效率怎么提高”,内容详细,步骤清晰,细节处理妥当,希望这篇“Go语言中除法运算的效率怎么提高”文章能帮助大家解...
本文小编为大家详细介绍“Go语言中的next()方法怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Go语言中的next()方法怎么使用”文章能帮助大家解决疑...
这篇文章主要介绍了Go语言中slice的反转方法怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Go语言中slice的反转方法怎...
这篇文章主要介绍“怎么使用Go语言实现数据转发功能”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用Go语
这篇文章主要讲解了“Go语言中怎么实现代码跳转”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究
这篇文章主要讲解了“Go语言如何多开协程”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Go语言如何多开协...