PyPy Cho Thấy Hiệu Suất Tăng 4 Lần Trong Khi CPython JIT Gặp Khó Khăn Trong Việc Mang Lại Tốc Độ Như Cam Kết

Nhóm Cộng đồng BigGo
PyPy Cho Thấy Hiệu Suất Tăng 4 Lần Trong Khi CPython JIT Gặp Khó Khăn Trong Việc Mang Lại Tốc Độ Như Cam Kết

Cộng đồng Python đang sôi nổi thảo luận về các cải tiến hiệu suất, đặc biệt xung quanh trình biên dịch JIT Cinder của Facebook và phiên bản triển khai PyPy thường bị bỏ qua. Trong khi nhiều sự chú ý tập trung vào việc tích hợp biên dịch JIT vào trình thông dịch CPython chính, nhiều nhà phát triển đang đặt câu hỏi tại sao một giải pháp đã thành công lại không nhận được sự công nhận xứng đáng.

PyPy Mang Lại Hiệu Suất Cải Thiện Thực Tế

PyPy , một phiên bản triển khai Python được viết bằng chính Python, đã âm thầm mang lại những cải tiến hiệu suất ấn tượng trong hơn một thập kỷ. Các thành viên cộng đồng báo cáo về những tăng tốc đáng kể trong môi trường sản xuất, với một số trường hợp thấy thời gian xử lý giảm từ hàng giờ xuống còn vài phút chỉ bằng cách chuyển đổi trình thông dịch. Phiên bản triển khai này hiện hỗ trợ các tính năng Python 3.12 và duy trì khả năng tương thích với hầu hết các gói Python.

Các benchmark thực tế cho thấy PyPy liên tục mang lại cải thiện hiệu suất 4 lần trên các khối lượng công việc khác nhau. Các ứng dụng web sử dụng Flask thấy những cải tiến tương tự, với một nhà phát triển báo cáo 8.127 giao dịch mỗi giây so với 4.512 giao dịch mỗi giây của CPython trong cùng môi trường thử nghiệm.

PyPy: Một phiên bản triển khai Python sử dụng biên dịch Just-In-Time để đạt được cải thiện hiệu suất đáng kể so với trình thông dịch CPython tiêu chuẩn

So sánh hiệu suất

  • PyPy : cải thiện tốc độ trung bình 4 lần so với CPython
  • Cinder JIT : tăng tốc 4 lần trên một số khối lượng công việc (kết quả không ổn định)
  • Benchmark PyPy Flask : 8.127 giao dịch/giây so với 4.512 giao dịch/giây của CPython
  • Python so với các ngôn ngữ biên dịch: chậm hơn 5-50 lần so với C/C++, chậm hơn 5-20 lần so với Go/Rust

CPython JIT Đối Mặt Với Thách Thức Triển Khai

Dự án Cinder của Facebook đại diện cho một cách tiếp cận khác đối với tối ưu hóa Python. Sau 18 tháng phát triển, nhóm đã đạt được tăng tốc 5 lần trong fork trình thông dịch tùy chỉnh của họ. Tuy nhiên, khi họ cố gắng hợp nhất những tối ưu hóa này trở lại codebase CPython chính, các cải tiến hiệu suất đã biến mất hoàn toàn.

Nỗ lực CPython JIT hiện tại, do Mark Shannon dẫn đầu, tập trung vào chuyên biệt hóa kiểu và các kỹ thuật tối ưu hóa thích ứng. Mặc dù đạt được tăng tốc 4 lần trên một số khối lượng công việc, kết quả vẫn không nhất quán trên các ứng dụng khác nhau. Một số chương trình thấy cải thiện tối thiểu, và JIT hiện chỉ hỗ trợ kiến trúc AMD64.

Chuyên biệt hóa kiểu: Một kỹ thuật tối ưu hóa trong đó các lệnh mã được tùy chỉnh cho các kiểu dữ liệu cụ thể để cải thiện tốc độ thực thi

Hạn chế của CPython JIT

  • Chỉ hỗ trợ kiến trúc AMD64
  • Yêu cầu huấn luyện tối ưu hóa theo hướng dẫn hồ sơ (PGO)
  • Hiệu suất cải thiện không nhất quán giữa các ứng dụng
  • Mục tiêu tăng tốc 5 lần ban đầu đã giảm xuống còn khoảng 50% cải thiện trong 4 năm
  • Thách thức tích hợp khi hợp nhất các tối ưu hóa trở lại codebase chính

Cộng Đồng Đặt Câu Hỏi Về Hướng Đi Của Python

Một phần đáng kể của cộng đồng Python bày tỏ sự thất vọng với việc tập trung vào cải tiến CPython trong khi PyPy vẫn chưa được sử dụng đầy đủ. Mặc dù có thành tích đã được chứng minh và tính năng ngang bằng hiện tại với Python 3.12, việc áp dụng vẫn còn hạn chế. Nhiều nhà phát triển vẫn tin sai rằng PyPy chỉ hỗ trợ một tập con của Python hoặc hoạt động kém với các extension C.

PyPy trung bình nhanh hơn 4 lần nhưng 95% cộng đồng python lại bỏ qua. Nó đã có tính năng ngang bằng với 3.12 và hầu hết các thư viện pypi đều hoạt động.

Những lo ngại về tương thích từng làm khổ PyPy phần lớn đã được giải quyết. Các phiên bản PyPy hiện đại xử lý các module extension C, mặc dù chúng có thể chạy chậm hơn mã Python thuần túy do overhead của việc mô phỏng reference counting.

Tình trạng tương thích của PyPy

  • Hỗ trợ các tính năng của Python 3.12
  • Tương thích với hầu hết các thư viện PyPI
  • Xử lý được các module mở rộng C (với một chút chi phí hiệu suất)
  • Hoạt động tốt với các framework phổ biến như Flask và Django
  • Hạn chế duy nhất: Một số lệnh gọi API riêng tư của CPython được sử dụng bởi một số thư viện nhất định

Tương Lai Của Hiệu Suất Python

Cách tiếp cận của Python Software Foundation đối với cải tiến hiệu suất tiếp tục tập trung vào các sửa đổi CPython thay vì chấp nhận các giải pháp hiện có như PyPy . Chiến lược này làm bối rối nhiều thành viên cộng đồng, đặc biệt là với thành công đã được chứng minh của PyPy trong môi trường sản xuất.

Quyết định gần đây của Microsoft về việc ngừng nhóm Faster CPython đã làm phức tạp thêm bối cảnh. Sự ra đi của nhóm đại diện cho một bước lùi đối với các nỗ lực tối ưu hóa CPython và làm nổi bật những thách thức trong việc triển khai biên dịch JIT trong trình thông dịch Python chính.

Cuộc tranh luận phản ánh một câu hỏi rộng lớn hơn về tương lai của Python: liệu có nên tiếp tục con đường khó khăn của việc tối ưu hóa CPython hay chấp nhận các phiên bản triển khai thay thế đã mang lại những cải tiến hiệu suất mà các nhà phát triển cần. Khi vai trò của Python trong phát triển phần mềm tiếp tục phát triển, quyết định này trở nên ngày càng quan trọng đối với khả năng c경쟁 lâu dài của ngôn ngữ.

Tham khảo: Following up on the Python JIT