为什么python慢
以下是最主要的原因:
- “它是GIL(Global Interpreter Lock全局解释器锁)”
- “它是解释型语言而非编译语言”
- “它是动态类型语言”
那么以上哪种原因对性能影响最大呢?
“它是全局解释器锁”
GIL
当CPython创建变量时,它会预先分配存储空间,然后计算当前变量的引用数目。这个概念被称为引用计数。如果引用计数为零,那么它将从系统中释放对应存储区域。
这就是为什么在CPython中创造“临时”变量不会使应用占用大量的存储空间——尤其是当应用中使用了for循环这一类可能大量创建“临时”变量的结构时。
当存在多个线程调用变量时,CPython如何锁住引用计数成为了一个挑战。而“全局解释锁”应运而生,它能够谨慎控制线程的执行。无论有多少的线程,解释器每次只能执行一个操作。
这对Python的性能意味着什么呢?
如果你的应用基于单线程、单解释器,那么讨论速度这一点就毫无意义,因为去掉GIL并不会影响代码性能。
如果你想使用线程在单解释器(Python 进程)中实现并发,并且你的线程为IO密集型(例如网络IO或磁盘IO),你就会看到GIL争用的结果。
是解释语言
文章没看懂
是动态语言
需要在运行的时候判断类型,加快了开发效率,但是增加了编译解释的时间,提高了灵活性,牺牲了效率。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!