golang协程和python协程对比,主要是测试在生产中的并发、效率等。

因为机器配置较弱(没钱开机器:smile:),均在 load15 负载约降为 0 的时候开启下次测试,避免机器负载影响。 同时程序无复杂逻辑处理,仅做返回。

7cf195ec1c758b5132dd4de49ab8ae59.png

go协程和python协程测试环境

压测环境

AWS 1核1G CPU为 E5-2676 v3 @ 2.40GHz,压测工具:wrk

目标环境

AWS 1核1G CPU为 E5-2676 v3 @ 2.40GHz,机器无弹性扩容性能,固死频率

前段均用nginx做反向代理

  • golang环境:nginx->docker->golang->gin
  • python环境:nginx->docker->python3.7->flask+gevent单进程模式

go协程测试结果

root@aws1:~# wrk -t6 -c200 -d30s http://x.x.x.x/uaRunning 30s test @ http://x.x.x.x/ua  6 threads and 200 connections  Thread Stats   Avg      Stdev     Max   +/- Stdev    Latency    94.19ms  128.56ms   1.12s    96.09%    Req/Sec   448.99     81.79   680.00     70.00%  80543 requests in 30.04s, 13.67MB readRequests/sec:   2681.19Transfer/sec:    465.95KBroot@aws1:~# wrk -t3 -c100 -d30s http://x.x.x.x/ua  Running 30s test @ http://3.0.3.0/ua  3 threads and 100 connections  Thread Stats   Avg      Stdev     Max   +/- Stdev    Latency    34.64ms    5.17ms  65.64ms   94.30%    Req/Sec     0.96k    69.42     1.05k    87.78%  85742 requests in 30.03s, 14.55MB readRequests/sec:   2854.81Transfer/sec:    496.12KB

golang在机器负载高的时候响应很慢,约为100ms左右,机器负载低的时候响应很快34ms。平均水平 QPS约为2800(1核1G内存,2.4GHZ处理器)

python协程测试结果

root@aws1:~# wrk -t6 -c200 -d30s http://x.x.x.x/cpplaRunning 30s test @ http://x.x.x.x/cppla  6 threads and 200 connections  Thread Stats   Avg      Stdev     Max   +/- Stdev    Latency   186.31ms   38.63ms   1.21s    98.70%    Req/Sec   182.58     93.09   333.00     56.87%  32052 requests in 30.05s, 6.85MB readRequests/sec:   1066.56Transfer/sec:    233.28KBroot@aws1:~# wrk -t3 -c100 -d30s http://x.x.x.x/cppla  Running 30s test @ http://x.x.x.x/cppla  3 threads and 100 connections  Thread Stats   Avg      Stdev     Max   +/- Stdev    Latency    94.45ms    7.26ms 127.97ms   92.59%    Req/Sec   350.32     42.29   450.00     77.56%  31425 requests in 30.04s, 6.71MB readRequests/sec:   1046.22Transfer/sec:    228.81KBroot@aws1:~# wrk -t3 -c50 -d30s http://x.x.x.x/cppla  Running 30s test @ http://x.x.x.x/cppla  3 threads and 50 connections  Thread Stats   Avg      Stdev     Max   +/- Stdev    Latency    45.89ms    4.44ms  78.93ms   95.25%    Req/Sec   349.89     41.41   454.00     80.67%  31381 requests in 30.03s, 6.70MB readRequests/sec:   1044.85Transfer/sec:    228.51KB

可以看出python在并发和机器负载低情况下跟golang响应方面差别不大,平均水平 QPS约为1000(1核1G内存,2.4GHZ处理器)。 不过并发能力确实弱很多,而且随着负载增高,越来越慢(还是动态语言解释的原因),不过话说instagram都用来处理上亿的并发,这点量算什么:smile:,Refer: 《Flask gevent 多进程WSGI,每秒1w5 QPS》

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐