PyPy是一個虛擬機項目,主要分為兩部分:一個Python的實現和 一個編譯器
PyPy的第一部分: 用Python實現的Python
其實這么說并不準確,準確得說應該是用rPython實現的Python,rPython是Python的一個子集,雖然rPython不是完整的Python,但用rPython寫的這個Python實現卻是可以解釋完整的Python語言。
PyPy的第二部分:編譯器
這是一個編譯rPython的編譯器,或者說這個編譯器有一個rPython的前端,目前也只有這么一個前端,不過它的后端卻是不少,也就是說這個編譯器支持許多的目標語言,比較重要的有:C,CIL,JavaScript...
第一部分看成pypy(1)第二部分看成pypy(2)
為什么你在同一層面下同時需要這兩者?你可以這樣想一下:PyPy(1)是一個用RPython寫的解釋器,因此它能加載用戶的Python代碼并將它編譯成字節碼。但是這個用RPython寫的解釋器本身要能運行,就必須要被另外一個Python實現去解釋。我們可以直接用CPython去.運行這個解釋器。但是這個還不夠快取而代之,我們使用了PyPy(2)去編譯這個PyPy的解釋器,生成其他平臺(比如C,JVM或CLI)代碼在我們的機器上運行,并且還加入了JIT特性。JIT能夠把字節碼轉換成機器語言,pypy之所以快,是因為它整合了JIT跟蹤技術的優化編譯器。
pypy性能測試
Cpython2.7.6,pyston0.2,pypy2.2.1的性能對比,使用的是pyston源代碼目錄下的minibenchmarks和microbenchmarks中
的python代碼來跑,對比結果如下表所示
| Cpython2.7.6 | pyston0.2 | ||||||||
microbenchmarks |
|
|
| |||||||
attribute_lookup.py | 258.544s | 200.387s | 2.667s | |||||||
attrs.py | 0.622s | 1.658s | 0.086s | |||||||
closures.py | 0.485s | 6.658s | 0.058s | |||||||
empty_loop.py | 3.532s | 19.248s | 0.248s | |||||||
fib2.py | 3.375s | 0.669s | 0.804s | |||||||
fib.py | 3.696s | 0.636s | 0.864s | |||||||
function_calls.py | 5.283s | 0.878s | 0.303s | |||||||
gcj_2014_2_b.py | 1.527s | 45.803s | 0.276s | |||||||
gcj_2014_3_b.py | 0.022s | 0.174s | 0.069s | |||||||
iteration.py | 0.185s | 1.242s | 0.062s | |||||||
lcg.py | 2.910s | 9.097s | 0.235s | |||||||
listcomp_bench.py | 10.132s | 56.170s | 1.379s | |||||||
nested.py | 0.368s | 6.828s | 0.057s | |||||||
polymorphism.py | 4.358s | 4.390s | 14.260s | |||||||
prime_summing.py | 20.197s |
學習交流
熱門圖片
猜你喜歡的新聞
新聞熱點 2020-02-16 09:52:44
2020-02-15 15:53:44
2020-02-11 22:02:38
2020-02-11 21:45:12
2020-02-07 10:36:18
2020-02-06 12:16:44
疑難解答 |