python为啥运行效率不高
python运算效率低,具体是什么原因呢,下列罗列一些:
原因:1、python是动态语言;2、python是解释执行,但是不支持JIT;3、python中一切都是对象,每个对象都需要维护引用计数,增加了额外的工作。4、pythonGIL;5、垃圾回收。
第一:python是动态语言
一个变量所指向对象的类型在运行时才确定,编译器做不了任何预测,也就无从优化。举一个简单的例子:r=a+b。a和b相加,但a和b的类型在运行时才知道,对于加法操作,不同的类型有不同的处理,所以每次运行的时候都会去判断a和b的类型,然后执行对应的操作。而在静态语言如C++中,编译的时候就确定了运行时的代码。
另外一个例子是属性查找,关于具体的查找顺序在《python属性查找》中有详细介绍。简而言之,访问对象的某个属性是一个非常复杂的过程,而且通过同一个变量访问到的python对象还都可能不一样(参见Lazyproperty的例子)。而在C语言中,访问属性用对象的地址加上属性的偏移就可以了。
第二:python是解释执行,但是不支持JIT(justintimecompiler)。虽然大名鼎鼎的google曾经尝试UnladenSwallow这个项目,但最终也折了。
第三:python中一切都是对象,每个对象都需要维护引用计数,增加了额外的工作。
第四:pythonGIL,GIL是Python最为诟病的一点,因为GIL,python中的多线程并不能真正的并发。如果是在IObound的业务场景,这个问题并不大,但是在CPUBOUND的场景,这就很致命了。所以笔者在工作中使用python多线程的情况并不多,一般都是使用多进程(prefork),或者在加上协程。即使在单线程,GIL也会带来很大的性能影响,因为python每执行100个opcode(默认,可以通过sys.setcheckinterval()设置)就会尝试线程的切换,具体的源代码在ceval.c::PyEval_EvalFrameEx。
第五:垃圾回收,这个可能是所有具有垃圾回收的编程语言的通病。python采用标记和分代的垃圾回收策略,每次垃圾回收的时候都会中断正在执行的程序,造成所谓的顿卡。infoq上有一篇文章,提到禁用Python的GC机制后,Instagram性能提升了10%。感兴趣的读者可以去细读。
以上内容为大家介绍了Python增强,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注IT培训机构:千锋教育。

相关推荐HOT
更多>>
python求和函数sum()详解
今天在学习的过程中,误用sum()函数,我又去查了查pythonsum()函数才恍然大悟。我本来想算几个Int值相加的和,本以为很简单的事情,结果却很悲...详情>>
2023-11-09 23:36:32
python子类可以调用父类方法吗
python中的子类中的__init__()函数会覆盖父类的函数,一些情况往往需要在子类里调用父类函数。如下例程里,处是需要调用父类函数的地方,接下来...详情>>
2023-11-09 20:20:51
python json.loads失败怎么办
json.loadsPython错误:1、'utf8'codeccan'tdecodebyte...由于需求,要用python读取网页返回json,并取得其中的数据但是却遇到以...详情>>
2023-11-09 16:41:05
python如何安装第三方函数库
python安装第三方库有两种方式:1.使用pip命令行工具在线下载你需要的第三方库2.手动下载第三方库,再使用pip命令安装1.使用pip命令行工具在线...详情>>
2023-11-09 16:01:37