Python--详述执行效率和开发效率

标注:本文讲解的为cpython,由c语言实现的python


问题:python为什么比其他编程语言性能差

编程语言效率一词上无外乎两种:开发效率和执行效率,目前市面上没有一种可以兼得两者的编程语言;

python则是更偏向于开发效率,至于执行效率,小编认为可以靠硬件支撑一下;下面我们就来分析一下python为什么性能差!


第一:python为动态语言

一个变量所指向对象的类型在运行时才能确定,python编译器做不了任何预测,也就无从优化;举个例子:c=a+b,a和b相加,只有在运行的时候你才能知道a和b的类型,对于加法操作,不同数据类型有不同处理,所以每次运行的时候还得去判断a和b的类型,然后执行对应的操作,而在编译型语言中(c语言),编译的时候就确定了运行时的代码

另外的例子就是属性查找,小编推荐一本书<python属性查找>,书中有详细介绍,简单的说,访问对象的某个属性是一个复杂的过程,而且通过同一个变量访问的对象还可能不一样,而在C语言中访问属性用对象的地址加上属性的偏移就可以了;

 

第二:python是解释执行

不支持JIT(just in time compiler)

 

第三:python中一切皆对象

每个对象都需要维护引用计数,增加了额外的工作

 

第四:python的全局解释器锁(GIL)

这可能是python最被大家议论的一点,因为GIL.python的多线程不能实现真正的并发,如果是在IO bound的业务场景,这个问题并不大,但是在CPU BOUND的场景,这就很致命了。所以笔者在工作中使用python多线程的情况并不多,一般都是使用多进程(pre fork),或者在加上协程。即使在单线程,GIL也会带来很大的性能影响,因为python每执行100个opcode(默认,可以通过sys.setcheckinterval()设置)就会尝试线程的切换,具体的源代码在ceval.c::PyEval_EvalFrameEx

 

第五:python的垃圾回收机制

python采用标记和分代的垃圾回收机制,每次执行垃圾回收的时候都会中断正在执行的程序,造成所谓的卡顿,infoq有一篇文章,提到禁用了python的GC机制后,instagram性能提升了10%;

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值