Re: [問題] python 的速度
※ 引述《yoco315 (眠月)》之銘言:
: ※ 引述《Jobaba (下雨了)》之銘言:
: : 感覺時間差好多喔..
: : 不知道大家覺得為何會差那麼多呢...
: Python 本來就是這麼慢的
: 你看一下 Python 的 Extending and Embedding
: 看看 Python 底層是怎麼用 C 實作的
: http://docs.python.org/ext/ext.html
: 看完就知道會這麼慢是很正常的
其實還好... python 包變數包得的確很沒有空間效率,
但是你是否有注意到大多數的 special member function 都在 type object
裡面有獨立的 entry? (也就是說它們的 binding 不需要 look up)
其實主要會慢還是慢在它的 VM 上面...
這邊稍微提一下 python 的程式是怎麼執行的,
當一支 python module 被讀進記憶體的時候,
它會先被 compile 成 bytecode, 也就是你在 .pyc 裡面看見的東西,
而執行的時候則是用一台 virtual machine 一個一個指令讀進來模擬,
而這是非常沒有效率的.
你可能會想問那為什麼其他的 bytecode virtual machine 沒有那麼慢,
比方說 java 或是 c# 都比 python 快上許多,
甚至 java 的執行效率直逼 native program?
那是因為它們有利用到 JIT(just-in-time compilation) 的技術,
每當執行到一段 bytecode 時, virtual machine 會先把它翻譯成 native code 執行,
而當以後再執行到同一段 bytecode 時, 翻譯的動作就可以省去.
python 內建是沒有這樣的機制的, 但我下一段會介紹一個替代品.
: 所以 Python 的效能關鍵部分才要用 C 寫的 Module 包裝起來
: 不然用直接在 Python 層次 codding 的話肯定會跑到哭
其實 python 寫得有技巧的話也可以很有效率...
比方說如果你知道 python list 其實就是 array 的話,
你那就不會常常寫 somelist.pop(0) 這樣的東西出來.
至於 bytecode 跑得慢的問題, 其實是有解的:
http://psyco.sourceforge.net/
這支 python module 很有意思, 它所實作的就是 JIT 的功能,
而且它是可以手動調整 profiling 的,
你可以自由設定某些較常執行的 function 才 optimize.
---
另外一個我很看好的東西是這個:
http://codespeak.net/pypy/
這玩意兒將可能是下一代的 python interpreter,
它最大的特色就是它整隻程式都是 python 寫的, 完全脫去了跟其他語言的牽連.
但是這樣會造成一個問題, 就是我們總得有一個 native 的 interpreter,
而 pypy 裡面有個叫 translator 的 module,
它的功能是把 python 的程式轉譯成較低階的語言,
比方說 C 或 LLVM 甚至是組語,
之後便可以再用別的 compiler 把它編譯成 native code.
(LLVM 是一種適合 optimize 的語言, 主要用於 compiler 內部表示)
translator 有趣的地方在於雖然 python 是一個 weak typing 的語言,
然而事實上正常的 python 程式大多數變數都還是只會擁有單一型別,
它能夠分析程式的 control flow 來進行 compile-time binding,
最後產生出來的 code 則有可能跟其他 strong typing 的語言同樣有效率.
這玩意兒等到實用化了, 我恐怕真的會把精熟的 C++ 忘光完全倒向 python 吧.
--
その乾いた哀愁の瞳に去來するものは何か?
失ったもの 得たもの
そして廣大なネットの狹間で彼が見たものとは?
虛像と實存と記號の中に彼は今、何を想うのか?
<バトルプログラマーシラセ>
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.109.224.64
推
02/18 10:14, , 1F
02/18 10:14, 1F
→
02/18 10:18, , 2F
02/18 10:18, 2F
推
02/18 12:58, , 3F
02/18 12:58, 3F
推
02/18 23:06, , 4F
02/18 23:06, 4F
→
02/18 23:07, , 5F
02/18 23:07, 5F
討論串 (同標題文章)
Python 近期熱門文章
PTT數位生活區 即時熱門文章