Python的语法确实牛,但是性能会怎么样呢
最近在学习Python,确实感觉Python的语法很强大,但是显然论性能要和C有差距。
但是具体是一个什么样的差距?求一个清楚、形象的描述
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
最近在学习Python,确实感觉Python的语法很强大,但是显然论性能要和C有差距。
但是具体是一个什么样的差距?求一个清楚、形象的描述
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(9)
BubbleSort.py
BubbleSort.php
BubbleSort.js
BubbleSort.java
BubbleSort.c
Ubuntu-14.04(i5-3230M)
Python-2.7执行1百万次冒泡排序
测试: time python BubbleSort.py
耗时: 0m16.910s
PHP7 RC2执行1百万次冒泡排序
测试: time php BubbleSort.php
耗时: 0m5.770s
Node执行1千万次冒泡排序
测试: time node BubbleSort.js
耗时: 0m1.874s
Java7执行1千万次冒泡排序
编译: javac BubbleSort.java
运行: time java BubbleSort
耗时: 0m0.611s
GCC-4.8.2执行1千万次冒泡排序
编译: gcc -O3 BubbleSort.c -o BubbleSort
运行: time ./BubbleSort 结果: 10000000 次 耗时0m0.481s
编译: gcc -O1 BubbleSort.c -o BubbleSort
运行: time ./BubbleSort 结果: 10000000 次 耗时0m0.561s
Python要比GCC慢300多倍,PHP7则要比GCC慢100多倍.
Node因为有V8 JIT,在计算上大幅领先Python和PHP,是GCC编译的本地程序的3.5倍耗时.
Java因为拥有更加成熟的Hotspot JIT,而且预先就生成了优质的Bytecode,所以性能接近GCC通用优化O1编译的本地程序.
Java和Node.JS因为JIT,能够把大量的循环计算和函数调用优化编译为本地代码,所以计算上肯定是吊打PHP和Python的.但这不代表Java和Node.JS编写的网络应用的吞吐量就能大幅领先PHP和Python应用.
就拿PHP来说,Web应用更多的还是CRUD数据库操作和NoSQL哈希操作,然后PHP用关联数组承载这些数据,偶尔还要进行字符串的处理.而这些操作普遍都是PHP直接调用C库提供的函数进行,这些函数性能上不会有太大的问题.真正慢的是PHP的代码,所以在Web上,让PHP做一些成千上万次的循环,显然是不合适的,这样肯定会造成服务卡顿和阻塞.而JIT恰好能优化这些成千上万次的循环,不过这种场景更像是压力测试,而非真实的Web环境.所以说,就算Node.JS/HHVM凭借JIT在计算速度上明显优于PHP,但不代表真实的Web应用的吞吐量也能明显优于PHP.因为编译本来就消耗时间和CPU,所以JIT不可能即时编译每一行代码,JIT只会选择编译热点代码,比如大量的循环,频繁被调用的函数.总而言之,当你的场景不能触发JIT时,JIT优势就会荡然无存.
Node.JS只是把网络/磁盘IO卸载到了libuv线程池里,用户在回调函数里编写的代码运行在主线程,同样会造成阻塞.所以说,即使Node.JS计算快,也应该尽量避免在回调函数里执行耗时的计算导致的阻塞,毕竟Node.JS真正只有一个主线程在提供服务,一旦主线程被阻塞,异步将无从谈起.
JSP是Tomcat为Java Web应用提供的模板引擎,而PHP内置C实现的模板引擎.Tomcat是Java编写的单进程多线程HTTP应用服务器,而PHP-FPM是用C编写的多进程FastCGI网络服务,就网络而言,PHP-FPM不见得性能不如Tomcat.而且,PHP-FPM的架构和PHP的运行模式也决定了PHP Web服务更稳定,不会轻易发生内存泄露/膨胀或者服务崩溃.PHP的库函数使用C实现的,而Java的核心运行时类库rt.jar是用Java编写的.
很多算法课老师的第一个问题都是:What's more important than performance?
正确性(correctness)
可维护下(maintainability)
扩展性(scalability)
兼容性(compatibility)
...
因为我们开发软件的目的是解决问题而不是让软件跑得快,长远来看程序员的时间比计算机的时间更可贵。
过度追求运行效率而忽视开发效率是不对的。
http://stackoverflow.com/questions/6964392/speed-comparison-with-project-euler-c-vs-python-vs-erlang-vs-haskell
性能自然差很多,不过可以用c扩展加速
python 是用来节约生命的
宏观上:脚本语言比jit差一个数量级,jit比编译类型差一个数量级。 也就是两个数量级。
python在脚本语言中比较的话,速度算是有点慢了,比不上lua等等,但也没有踮脚。
python有很多加速方式,pypy、cffi、cython、ctypes等。 优化的好能和C到一个数量级。
没有业务去单纯比较语言运行速度是无意义。
我觉得谈性能都是在扯淡 很多时候语言的熟悉和喜好占很大的比例。这就是现在java程序员遍地都是,而python和c以及node不及十分之一的主要原因。我劝楼主还是别在讨论这种没有意义的话题了。不如好好学学底层原理,比如计算机操作系统计算机网络。别浪费时间在语言上了。语言这种东西,喜欢就好了。
都21世纪了,以现在机器的计算速度和带宽,语言早就不是制约性能的瓶颈了
语法牛?试试scala
我只会java,性能我觉得不是问题,如何快速可维护才行,现在内存 cpu 不是问题,io瓶颈急需解决。