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可用于实现一些对并发要求不高的场景。

相关内容

    暂无相关文章