C++、Go、OpenResty、Python HTTP服务性能PK,openrestypython
C++、Go、OpenResty、Python HTTP服务性能PK,openrestypython
笔者工作中使用过几种开发HTTP服务的方案,周末赋闲在家,分别用C++ Boost.Beast,Go,OpenResty和Python Tornado实现了一个简单的 HTTP/1 服务(响应输出Hello World)对他们的QPS性能做一个PK。
笔者的测试机器:CentOS 6.5 4核 8G
C++:Boost 1.68,使用Boost.Beast http库;最大线程数设置为4。
Go:版本1.10,使用net/http;NumCPU=4 。
OpenResty:版本1.13.6.2;Nginx worker数设置为4 。
Python:版本3.6,使用Tornado,进程数设置为4。
使用ab发20W个请求,分别以并发数1,2,4,8,16,32,64进行测试。
测试结果如下。
Go | C++ Boost.Beast | OpenResty | Python tornado | |
n=20W, c=1 | 3697 | 4489 | 4313 | 1002 |
n=20W, c=2 | 6353 | 8263 | 8044 | 2134 |
n=20W, c=4 | 9873 | 11542 | 12508 | 3707 |
n=20W, c=8 | 14253 | 14760 | 15638 | 4299 |
n=20W, c=16 | 15805 | 15997 | 17192 | 4386 |
n=20W, c=32 | 16916 | 16690 | 18514 | N/A |
n=20W, c=64 | 18374 | 17315 | 19610 | N/A |
Tornado到8并发时,4核CPU基本跑满,所以32,64就没有继续测。
内存和CPU情况在这里没有列出,其中OpenResty的内存占用非常低,只有30K,总体内存占用 OpenResty < Boost < Go < Python。
由于笔者机器上没有Java环境,所以未对Java Netty进行测试,感兴趣的同学可以补上看看。
上述测试结果看出:OpenResty、Boost.Beast、Go的并发性能都很出色,属于第一梯队,大家有搭建高并发的HTTP服务的需求时可以考虑这3种实现。
Python可用于实现一些对并发要求不高的场景。
评论暂时关闭