Python与C语言、Java、Nodejs、Golang进行性能测试比较!

不谈风月_0eb8 · · 2735 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

<tt-image data-tteditor-tag="tteditorTag" contenteditable="false" class="syl1564381198102" data-render-status="finished" data-syl-blot="image" style="box-sizing: border-box; cursor: text; color: rgb(34, 34, 34); font-family: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", "Helvetica Neue", Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial; display: block;">
image

<input class="pgc-img-caption-ipt" placeholder="图片描述(最多50字)" value="" style="box-sizing: border-box; outline: 0px; color: rgb(102, 102, 102); position: absolute; left: 187.5px; transform: translateX(-50%); padding: 6px 7px; max-width: 100%; width: 375px; text-align: center; cursor: text; font-size: 12px; line-height: 1.5; background-color: rgb(255, 255, 255); background-image: none; border: 0px solid rgb(217, 217, 217); border-radius: 4px; transition: all 0.2s cubic-bezier(0.645, 0.045, 0.355, 1) 0s;"></tt-image>

Python资源共享群:484031800

背景说明

在最近的项目开发中,遇到一个 Python处理性能问题

由于实时数据量较大(每秒有2100条日志,且每条日志平均大小在1kB左右),且受制于硬件资源限制,使用Python做实时数据处理,无法完成当前规模的数据集处理能力,数据越积越多,数据入库延时越来越长!

  • 第一版Python实现,其处理性能:840/s
  • 优化版Python实现,其处理性能:1100/s

离2100/s,才刚满足其一半的性能,这是不能接受的!

结论:在不使用Python多并发处理或增加硬件资源条件下,Python是不能完成当前系统性能要求的!

补充说明:

开3~4个Python数据处理进程能够刚刚满足系统性能要求,但是数据处理仅是系统一个模块,系统还有其他功能模块,对数据处理硬件资源要求,CPU不超过2个逻辑核心,内存最大不超过4GB;

关于硬件资源,由于项目规模原因,设备资源是有限的。

解决方案

本身知道Python运行速度并不快,跟其他编程语言(Java、Golang、C++等)性能差距较大。平时项目开发,使用Python都没有任何问题。确实没有重视Python性能方面的问题。

综合考虑,就眼下项目实际情况,为解决数据处理性能问题, 采用Golang方案,使用Go语言重写数据处理模块代码逻辑,并最终解决了数据处理的性能问题 !

最后说一下Go版数据处理性能: Go版数据处理性能是Python版的4到5倍,2100条日志处理只用了0.3s,仅使用单核CPU未并非处理,而且也只使用了单核 CPU 60%的处理性能!

Python性能测试

接下来进入主题,Python运行效率慢于其他编程语言,到底有多慢呢?那我们做一个Python的性能测试。

1.测试内容:

求0~N之间质数个数,具体求以下整数区间质数个数:

  • 0~1w
  • 0~4w
  • 0~10w
  • 0~20w
  • 0~50w
  • 0~100w

强调说明:本测试只是用来说明Python运行效率,语言其他方面的对比不属于该测试范畴!

2.测试编程语言包括:

测试编程语言有:C语言、Java、node.js、Golang、Python等,通过不同语言测试结果,对比得出Python的运行效率结论。

语言版本说明:

  • C语言:gcc version 8.1.0
  • Java:1.8.0_121
  • Nodejs:v10.15.3
  • Golang:v1.12.7
  • Python:v3.7.3

除了Python,选择了C语言、Java、Nodejs、Golang作为性能对比测试语言,代表了当前主流的、使用广泛的编程语言

3.测试环境说明:

  • 在windows10最新版本;
  • java代码打包成可执行jar包,python代码生产pyc文件,C代码和Go代码生产各自的可执行代码;

<tt-image data-tteditor-tag="tteditorTag" contenteditable="false" class="syl1564381198116" data-render-status="finished" data-syl-blot="image" style="box-sizing: border-box; cursor: text; color: rgb(34, 34, 34); font-family: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", "Helvetica Neue", Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial; display: block;">
image

<input class="pgc-img-caption-ipt" placeholder="图片描述(最多50字)" value="" style="box-sizing: border-box; outline: 0px; color: rgb(102, 102, 102); position: absolute; left: 187.5px; transform: translateX(-50%); padding: 6px 7px; max-width: 100%; width: 375px; text-align: center; cursor: text; font-size: 12px; line-height: 1.5; background-color: rgb(255, 255, 255); background-image: none; border: 0px solid rgb(217, 217, 217); border-radius: 4px; transition: all 0.2s cubic-bezier(0.645, 0.045, 0.355, 1) 0s;"></tt-image>

  • 求素数过程采用相同的方法(两层for循环)

4.测试结果:

<tt-image data-tteditor-tag="tteditorTag" contenteditable="false" class="syl1564381198122" data-render-status="finished" data-syl-blot="image" style="box-sizing: border-box; cursor: text; color: rgb(34, 34, 34); font-family: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", "Helvetica Neue", Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial; display: block;">
image

<input class="pgc-img-caption-ipt" placeholder="图片描述(最多50字)" value="" style="box-sizing: border-box; outline: 0px; color: rgb(102, 102, 102); position: absolute; left: 187.5px; transform: translateX(-50%); padding: 6px 7px; max-width: 100%; width: 375px; text-align: center; cursor: text; font-size: 12px; line-height: 1.5; background-color: rgb(255, 255, 255); background-image: none; border: 0px solid rgb(217, 217, 217); border-radius: 4px; transition: all 0.2s cubic-bezier(0.645, 0.045, 0.355, 1) 0s;"></tt-image>

5.测试结论:

这5种编程语言,C语言运行效率最高,Python的运行效率最差。

C语言、Java、Node.js、Golang的运行效率比Python成几何倍数高。

举一个比较明显测试结果,求0~20w之整数区间的质数个数,这个过程:

  • C语言用时6s
  • Java用时7s
  • Nodejs用时8s
  • Golang用时17s
  • Python用时121s,是C语言的20倍,是Java的17倍,是Nodejs的15倍,是Go的7倍

开发效率和运行效率

对编程而言,开发效率和运行效率是始终是对立的:

  • 追求开发效率高,其运行效率不快;
  • 追求运行效率高,其开发效率不快;

既能保证开发效率,又能兼顾运行效率,那只能等到量子计算机普及了,扯远了....

Python的开发效率

Python运行效率不高,但是其开发效率很高,这就是Python的优势,简单易学习,快速入门、实现短周期迭代开发,加之拥有丰富的、功能强大第三方库,一旦你使用Python一段时间,你就会对它上瘾,产生依赖,离不开它,再使用其他编程语言,各种不适应,因为Python给我们开发带来了太多方便,这就是Python开发效率!

再举个例子:

网上有这样一个段子,同样一个功能模块,使用C语言实现需要写几百行代码,使用Java实现需要写100行代码,使用Python实现就需要十几行代码,这个一点不夸张,确实是这样,虽然Python运行效率不强,但是Python的开发效率快。

综述

这个测试目的:是对Python这门语言有一个正确的认知,不仅要知道Python功能强大,优势众多,应用广泛,但性能是Python不能规避的问题,只有了解了这些,我们才能正确运用Python!


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:不谈风月_0eb8

查看原文:Python与C语言、Java、Nodejs、Golang进行性能测试比较!

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2735 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传