Python为什么慢

python相较其他语言,性能低?

相较于一些其他的静态,编译语言,例如java,c,c#,c++等等,python是其中性能最差的这一,从以下几个方面来分析为什么python执行这么慢

GIL锁

现代计算机的CPU有多个内核,有时还有多个处理器。为了利用所有这些额外的处理能力,操作系统定义了一个称为线程的底层结构,在这个结构中,一个进程(如Chrome浏览器)可以产生多个线程,并在其中为系统提供指令。这样,如果一个进程是cpu密集型的,那么该负载可以跨内核共享,从而有效地使大多数应用程序更快地完成任务。

  • cpython创建一个变量的时候,会根据该对象有多少引用记录来分配内存,如果引用是0的个数,那么就代表该内存会被清除掉
  • python中的web app框架,每个请求都是一个单独的解释器来运行的,所以每次请求都有一个锁
  • JavaScript的事件循环和回调模式是异步编程代替并发实现的方式。Python与asyncio事件循环有相似之处。

因为python是一门解释性的语言

每次cpython运行一个程序,CPython将开始一系列的读取、试错、解析、编译、解释和执行代码,并且每次都会重新生成一个.pyc的文件,所以每次执行程序,cpython都会实时重新完成上面的步骤
JIT(just in time)的编译机制,java有一个自己的虚拟编译系统,但每次加载都会很慢。但是,第一次执行完后,后面的加载都会非常快
AOT(ahead of time)的编译机制,c,c++的语言机制,表明必须让cpu明白每一行代码的意义,然后再开始用解释器来执行
pypy有JIT,但cpython开始调用解释器就很慢了,pypy会更慢

因为python是一门动态语言

动态语言的定义在于,赋值变量之前,不需要申明变量的类型,解释器会根据变量值来自行判断用什么类型来存储
cpython是放弃了优化性能的空间来保持高度的灵活性

总结

但是,有一些方法可以通过利用异步、理解分析工具并考虑使用多解释器来优化Python应用程序
对于一些应用,如果不在乎它的启动时间,那么可以使用pypy的方式,会比cpython更优效率
对于性能非常重要且具有更多静态类型变量的代码部分,请考虑使用Cython

详细资料