关于速度:Python与Java
我很好奇Python和Java的速度问题。直觉上感觉Python应该比Java慢很多,但我想了解得更多一点……有没有人能给我更多的信息?或者推荐一些不错的文章让我看看?
4 个回答
我没有具体的数据可以提供,但有一个有趣的地方是,Python也可以在Java虚拟机上运行(其他很多动态语言或脚本语言也是如此)。比如有叫做JPython和Jython的东西。这意味着一些Python应用程序可以以接近原生Java应用程序的速度运行,前提是Python在Java虚拟机上的运行方式是高效的。
提到没有JIT(即时编译器)是一个原因,但另一个原因是Python是动态语言。没错,这确实让这个语言运行得比较慢。你可以通过使用Cython自己来验证这一点。
用Python写的函数通常可以用Cython编译成C代码,这样会让它运行得更快。但是,当你开始给变量和参数添加类型信息时,速度会变得更快,因为Cython和C编译器可以开始使用一些简单的优化,而这些在类型是动态的时候是做不到的。
所以,Python的动态特性是造成速度差异的一个原因。
关于未来:Python 3有函数注解功能:http://www.python.org/dev/peps/pep-3107/ 我预计在几年后,像PyPy和UnladenSwallow这样的JIT编译器会利用这些信息,那时候你会发现Python的速度可以和Java一样快,甚至通过小心使用Cython,速度会更快。:)
目前,Python的标准实现(叫做CPython)比Java慢,因为标准的CPython没有一个强大的即时编译器。不过,这种情况还在改变。
有几个项目的目标是让Python运行得更快:
根据我尝试过的情况,这些项目在某些特定算法上能显著提高速度,但对于一般的应用代码,还是无法达到Java的速度。目前大部分的努力似乎都集中在PyPy上。