是什么缘由致使Python运算效率这么低呢?

Python是一门目前很流行的编程语言,因其语法简洁、功能强大、上手简单,目前已普遍应用于人工智能等领域,可是python运算效率低,具体是什么缘由呢,下列罗列一些:python

第一:python是动态语言编程

一个变量所指向对象的类型在运行时才肯定,编译器作不了任何预测,也就无从优化。举一个简单的例子: r = a + b。 a和b相加,但a和b的类型在运行时才知道,对于加法操做,不一样的类型有不一样的处理,因此每次运行的时候都会去判断a和b的类型,而后执行对应的操做。而在静态语言如C++中,编译的时候就肯定了运行时的代码。安全

另一个例子是属性查找,关于具体的查找顺序在《python属性查找》中有详细介绍。简而言之,访问对象的某个属性是一个很是复杂的过程,并且经过同一个变量访问到的python对象还均可能不同(参见Lazy property的例子)。而在C语言中,访问属性用对象的地址加上属性的偏移就能够了。网络

第二:python是解释执行,可是不支持JIT(just in time compiler)。虽然大名鼎鼎的google曾经尝试Unladen Swallow 这个项目,但最终也折了。多线程

第三:python中一切都是对象,每一个对象都须要维护引用计数,增长了额外的工做。并发

第四:python GIL,GIL是Python最为诟病的一点,由于GIL,python中的多线程并不能真正的并发。若是是在IO bound的业务场景,这个问题并不大,可是在CPU BOUND的场景,这就很致命了。因此笔者在工做中使用python多线程的状况并很少,通常都是使用多进程(pre fork),或者在加上协程。即便在单线程,GIL也会带来很大的性能影响,由于python每执行100个opcode(默认,能够经过sys.setcheckinterval()设置)就会尝试线程的切换,具体的源代码在ceval.c::PyEval_EvalFrameEx。编程语言

第五:垃圾回收,这个多是全部具备垃圾回收的编程语言的通病。python采用标记和分代的垃圾回收策略,每次垃圾回收的时候都会中断正在执行的程序,形成所谓的顿卡。infoq上有一篇文章,提到禁用Python的GC机制后,Instagram性能提高了10%。感兴趣的朋友能够去仔细研磨。ide

兔子动态IP致力于为各行业提供最优质的网络服务,不只能够提供动态IP服务,还能够提供企业级爬虫代理IP服务,为您提供安全稳定、高效便捷的爬虫代理IP服务,提供代理IP资源的同时,还能够设置不一样类型的HTTP代理,以及设置去重等等标准,助您不间断获取行业数据,助您轻松跨入 “人工智能”时代。性能

相关文章
相关标签/搜索