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培訓機構:千鋒教育。

猜你喜歡LIKE
相關推薦HOT
更多>>
python中的filter函數功能是什么?
python中的filter函數功能是什么?在python中,面對眾多的數據,我們要過濾篩選出我們需要的數據。python中的filter函數就是起到了過濾篩選的作...詳情>>
2023-11-10 20:37:27
pythontime模塊是什么
pythontime模塊是什么在python中使用時間,就免不了和time模塊打交道,另外兩個模塊這個暫時先不做介紹。做time模塊的使用上,我們可以用它來對...詳情>>
2023-11-10 15:53:16
python是什么編程語言
python是什么編程語言1、說明是一種面向對象、解釋型計算機程序設計語言,由GuidovanRossum于1989年底發明,第一個公開發行版發行于1991年。Pyt...詳情>>
2023-11-10 15:21:05
python異常處理的兩種技巧
python異常處理的兩種技巧1、傳遞異常有時我們會在捕捉到一個異常后重新引發它(傳遞異常),實現起來很簡單,使用不帶參數的raise語句即可。deff...詳情>>
2023-11-10 14:49:39熱門推薦
python中的filter函數功能是什么?
沸python delattr函數如何使用?
熱python中pdb模塊怎么用?
熱Python如何截圖保存?
新python?中缺少module怎么辦?
python strftime和strptime的不同分析
python time.strptime的格式化
python中@contextmanager是什么?
python對象的三要素是什么
pythonGIL在Python多線程的應用
python如何對多個CSV文件進行讀取
pythonif嵌套命令如何理解?
python對列表進行永久性或臨時排序的方法
python生成器調用方法引發異常
技術干貨






