2009-02-02 27 views
10

Theo này:Tại sao IronPython nhanh hơn so với chính thức Python Interpreter

http://www.codeplex.com/IronPython/Wiki/View.aspx?title=IP20VsCPy25Perf&referringTitle=IronPython%20Performance

IronPython (Python cho Net) là nhanh hơn so với Python thường xuyên (CPython) trên cùng một máy. Tại sao điều này? Tôi nghĩ rằng mã C đã biên dịch sẽ luôn nhanh hơn mã byte bytecode tương đương của CLI.

+3

Tôi không chắc chắn rằng cPython chính thức hơn là Jython hoặc IronPython. Xem http://docs.python.org/reference/introduction.html#alternate-implementations –

+0

@ S.Lott: nó không phải là * Python, nhưng nó là việc thực hiện mặc định đơn giản chỉ vì đức hạnh là người đầu tiên ở đó. –

+3

Python không được biên dịch sang C –

Trả lời

38

Mã Python không được biên dịch sang C, bản thân Python được viết bằng C và diễn giải mã byte bytecode. CIL được biên dịch thành mã máy, đó là lý do tại sao bạn thấy hiệu suất tốt hơn khi sử dụng IronPython.

+0

Có một điểm bắt. Tôi đồng ý về lý do tại sao IronPython nhanh hơn. IronPython chậm hơn về thời gian khởi động. (Không quan trọng nếu bạn sử dụng mã này thường xuyên.) – ozgur

3

Nó có thể được giải thích bằng ký hiệu này trên trang bạn liên quan đến:

Do trang web của bộ nhớ đệm trong động Language Runtime, IronPython thực hiện tốt hơn với nhiều PyStone đi hơn giá trị mặc định

+0

Nếu không biết bộ nhớ đệm của trang web là gì (một khái niệm rất phức tạp chỉ thực sự được giải thích trong một chuỗi video trên Channel9), điều này sẽ không cho bạn biết gì.Ngoài ra, IPy1 (trước đây là DLR) cũng có hiệu suất tốt hơn CPython. Tất cả đều đi xuống để biên dịch CIL. –

8

Bạn nói đúng, C nhanh hơn rất nhiều. Đó là lý do tại sao trong những kết quả CPython nhanh gấp đôi khi nói đến từ điển, gần như là nguyên chất C. Mặt khác, mã Python không được biên dịch, nó được giải thích. Các cuộc gọi hàm trong CPython rất chậm. Nhưng mặt khác:

TryRaiseExcept: +4478.9% 

Bây giờ, ở đó IronPython nhận được sai lầm khủng khiếp.

Và sau đó, có dự án PyPy này, với một trong các mục tiêu là trình biên dịch Just-In-Time. Thậm chí còn có cả tập hợp con của Python, được gọi là RPython (Python bị rút gọn) có thể được biên dịch tĩnh. Tất nhiên là nhanh hơn .

+0

Tôi luôn tự hỏi tại sao RPython lại không được quảng bá nhiều hơn. Nó đủ năng động để có ích, nhưng rất nhanh. Nếu có thêm tài liệu cho nó, tôi chắc chắn sẽ sử dụng nó. – Daishiman

+6

Đội PyPy không thực sự muốn khuyến khích mọi người sử dụng RPython. Họ xem nó như là một chi tiết thực hiện của PyPy - nó thay đổi mọi lúc, có tài liệu kém và báo cáo lỗi khủng khiếp. Họ đang tập trung vào việc làm cho Pypy JIT đủ nhanh mà bạn không * cần * để sử dụng RPython để có được tốc độ ... – fuzzyman

+0

RPython không có ý định được sử dụng (hoặc thậm chí được chăm sóc bởi nhà phát triển). Nó chỉ là một tập con mà PyPy sử dụng để biên dịch. Nếu hiểu biết của tôi không sai, một tập hợp con, một phần mã của bạn sẽ được biên soạn và một số sẽ vẫn được giải thích. – ozgur

5

Tôi không chắc chắn chính xác cách bạn đang vẽ kết luận rằng IronPython nhanh hơn CPython. Liên kết mà bạn đăng có vẻ chỉ ra rằng chúng có liên quan đến những thứ khác nhau (như các ngoại lệ như đã được chỉ ra).

5

Lang thang câu hỏi của bạn "Tại sao?", Thành "Ồ, thực sự?" Các "tốt ở những thứ khác nhau" (Jason Baker) là đúng trên. Ví dụ, cpython đánh bại IronPython để giảm thời gian khởi động.

c:\Python26\python.exe Hello.py 
c:\IronPython\ipy.exe Hello.py 

CPython thực hiện một thế giới hello cơ bản gần như ngay lập tức (< 100ms), nơi IronPython có overhead khởi động 4 hoặc 5 giây. Điều này làm phiền tôi, nhưng không đủ để ngăn tôi sử dụng IronPython.

+6

Đó không phải là lợi thế của CPython trên IronPython cho chính họ. 4 hoặc 5 scond là thời gian khởi động của CLR, không phải của IronPython. –

+1

Nó không quan trọng tại sao phải mất 4 hoặc 5 giây để khởi động. Nó nhanh hơn một khi nó chạy (một phần làm cho CLR) nhưng chậm hơn để bắt đầu (một phần do CLR). Xem xét hiệu suất có ý nghĩa dựa trên tác động của người dùng. Nếu trường hợp sử dụng cho một ngôn ngữ kịch bản là nhiều kịch bản nhỏ, đây là một nhược điểm nghiêm trọng. – Precipitous

+1

Có lẽ thời gian khởi động IronPython có thể được giảm xuống bằng một hành động một lần để tạo trước mã máy cho IronPython .dll? Xem Ngen.exe của Microsoft (Trình tạo hình ảnh gốc) http://msdn.microsoft.com/en-us/library/6t9t5wcf(v=vs.110).aspx – ToolmakerSteve

Các vấn đề liên quan