Python chậm hơn bao nhiêu lần?

Python là ngôn ngữ kịch bản trong khi C là ngôn ngữ lập trình. C/C++ tương đối nhanh so với Python vì khi bạn chạy tập lệnh Python, trình thông dịch của nó sẽ diễn giải từng dòng tập lệnh và tạo đầu ra nhưng trong C, trình biên dịch trước tiên sẽ biên dịch nó và tạo đầu ra được tối ưu hóa đối với . Trong trường hợp các ngôn ngữ khác như Java và. NET, mã byte Java và. NET bytecode tương ứng chạy nhanh hơn Python vì trình biên dịch JIT biên dịch bytecode thành mã gốc khi chạy. CPython không thể có trình biên dịch JIT vì bản chất động của Python gây khó khăn cho việc viết một trình biên dịch

Sự khác biệt

Như chúng ta đã biết, Python là ngôn ngữ thông dịch, trong khi C là ngôn ngữ biên dịch. Mã được giải thích luôn chậm hơn mã máy trực tiếp vì cần nhiều hướng dẫn hơn để thực hiện lệnh được giải thích hơn là thực hiện lệnh máy thực tế. Trước khi chương trình có thể thực hiện công việc thực tế, CPU phải hiểu các hướng dẫn Python. Vì vậy, trình thông dịch Python kiểm tra từng câu lệnh theo các quy tắc của ngôn ngữ Python, chẳng hạn như phân bổ bộ nhớ để lưu trữ các biến, loại bỏ các khoảng trống và nhận xét từ chương trình và các tác vụ liên quan khác. Quá trình này được lặp lại cho mỗi dòng của chương trình và làm tăng đáng kể chi phí thực thi chương trình.

C nhanh

Mặt khác, C không mất nhiều thời gian kiểm tra lại mã nguồn và nhanh chóng chuyển thành các lệnh của CPU. Trước khi thực thi, một trình biên dịch riêng sẽ chuyển đổi chương trình ngôn ngữ của con người thành các lệnh của CPU, kiểm tra lỗi, phân bổ bộ nhớ và các biến, loại bỏ các nhận xét và khoảng trống, đồng thời tối ưu hóa các lệnh kết quả. Kết quả của mã được biên dịch được liên kết với các mã được tạo sẵn khác và kết quả là bạn sẽ nhận được các lệnh CPU vững chắc, sẵn sàng thực hiện công việc được giao mà không cần chuẩn bị nhiều. Trong nội bộ, lý do khiến mã Python thực thi chậm hơn là do mã được diễn giải trong thời gian chạy thay vì được biên dịch thành mã gốc tại thời điểm biên dịch

Python cực kỳ phổ biến vì nó dễ học, linh hoạt và có hàng nghìn thư viện hữu ích cho khoa học dữ liệu. Nhưng có một điều là nó không nhanh.  

Điều đó sắp thay đổi trong Python 3. 11, hiện đang trong giai đoạn thử nghiệm đầu tiên của bản xem trước [phiên bản 3. 11. 0b1] trước khi phát hành ổn định vào cuối năm nay. Nhà phát triển Core Python [CPython] Mark Shannon đã chia sẻ chi tiết về dự án giúp Python nhanh hơn tại hội nghị PyCon 2022 tuần này, nơi các nhà phát triển cũng thể hiện tiến độ về mục tiêu chạy mã Python trong trình duyệt.  

Năm ngoái, Microsoft đã tài trợ một dự án cho Python Software Foundation [PSF], do nhà sáng lập Python, Guido van Rossum và Shannon, dẫn đầu, để làm cho Python nhanh gấp đôi so với phiên bản ổn định hiện tại 3. 10 loạt. Tầm nhìn là thúc đẩy Python hướng tới hiệu suất của C.  

XEM. Làm thế nào để được thăng chức. Năm cách để thăng tiến và có một sự nghiệp thành công

Microsoft đã thuê van Rossum vào năm 2020 và cho anh ấy toàn quyền chọn bất kỳ dự án nào. Tại hội nghị PyCon 2021 năm ngoái, anh ấy nói rằng anh ấy "đã chọn quay về cội nguồn của mình" và sẽ làm việc với sự thiếu hiệu suất nổi tiếng của Python.  

Có lẽ, hiệu suất không phải là ưu tiên hàng đầu của Python vì việc áp dụng đã được thúc đẩy bởi máy học và khoa học dữ liệu nhờ Tensor Flow, Numpy, Pandas và nhiều nền tảng khác, chẳng hạn như Boto3 SDK dành cho Python của AWS. Các nền tảng này được tải xuống hàng chục triệu lần mỗi tháng và được sử dụng trong các môi trường thường không bị hạn chế bởi phần cứng.  

Dự án CPython nhanh hơn đã cung cấp một số thông tin cập nhật về CPython 3. 11 hiệu suất trong năm qua. Trước thềm PyCon 2022, dự án đã công bố nhiều kết quả hơn so với 3. 11 beta xem trước đến 3. 10 trên hàng chục chỉ số hiệu suất, cho thấy rằng 3. 11 là tổng thể 1. 25 lần nhanh hơn 3. 10.  

Shannon thực tế về khả năng cải thiện hiệu suất Python của dự án, nhưng tin rằng những cải tiến này có thể mở rộng khả năng sử dụng khả thi của Python cho nhiều máy ảo hơn.  

"Python được công nhận rộng rãi là chậm. Mặc dù Python sẽ không bao giờ đạt được hiệu suất của các ngôn ngữ cấp thấp như C, Fortran hay thậm chí là Java, nhưng chúng tôi muốn nó có thể cạnh tranh với việc triển khai nhanh các ngôn ngữ tập lệnh, như V8 cho Javascript hoặc luajit cho lua," ông đã viết vào năm ngoái trong .  

"Cụ thể, chúng tôi muốn đạt được các mục tiêu hiệu suất này với CPython để mang lại lợi ích cho tất cả người dùng Python, kể cả những người không thể sử dụng PyPy hoặc các máy ảo thay thế khác. "

Cách tiếp cận chính được nêu chi tiết trong PEP 659 là một "trình thông dịch chuyên biệt, thích ứng chuyên biệt hóa mã một cách mạnh mẽ, nhưng trên một khu vực rất nhỏ và có thể điều chỉnh để chuyên môn hóa sai một cách nhanh chóng và với chi phí thấp. "

Như đã lưu ý, việc tối ưu hóa cho VM khá "đắt đỏ", thường đòi hỏi thời gian "khởi động" lâu. Để tránh chi phí thời gian này, VM nên "suy đoán rằng chuyên môn hóa là hợp lý ngay cả sau một vài lần thực thi chức năng", vì vậy trình thông dịch cần tối ưu hóa và hủy tối ưu hóa liên tục và rất rẻ.  

Điều này sẽ dẫn đến một trình thông dịch nhanh hơn cho CPython theo dõi các mã byte riêng lẻ trong quá trình thực thi chương trình. Công việc trên trình thông dịch mới gần như đã hoàn tất nhưng vẫn cần hoàn thành các chuyên môn động cho các vòng lặp và hoạt động nhị phân, theo PSF.  

Ngoài ra, mức tiêu thụ bộ nhớ trong 3. 11 không thay đổi từ 3. 10

XEM. Các nhà phát triển đang đối mặt với tình trạng kiệt sức. Đây là cách các công ty đang cố gắng khắc phục

Đối với câu hỏi về trình biên dịch just-in-time [JIT] cho hiệu suất của Python, Shannon cho rằng nó không phải là ưu tiên và có thể sẽ không xuất hiện cho đến Python 3. 13, theo báo cáo của Python Software Foundation về sự kiện này.  

Anaconda, nhà sản xuất bản phân phối Anaconda Python cho khoa học dữ liệu, đang hỗ trợ dự án Pyston, một triển khai Python hứa hẹn cải thiện tốc độ so với Python.  

Một trong những nỗ lực trước đây của Anaconda để tăng tốc Python là dự án Numba, trình biên dịch JIT dựa trên LLVM cho CPython, giúp tăng tốc các hàm số Python chạy trên CPU hoặc GPU, nhưng không thể tối ưu hóa toàn bộ chương trình và không giải quyết việc sử dụng Python rộng hơn . Một cái khác là PyPy, một triển khai CPython với trình biên dịch JIT để có hiệu suất nhanh hơn.    

Theo kế hoạch triển khai Faster Python, CPython 3. 12 có thể nhận được một "trình biên dịch JIT đơn giản cho các vùng nhỏ" để biên dịch các vùng nhỏ của mã chuyên biệt, trong khi 3. 13 sẽ tăng cường trình biên dịch để mở rộng các vùng biên dịch.  

Bao nhiêu lần Python chậm hơn C?

Đó là 450 triệu vòng lặp trong một giây, nhanh hơn 45 lần so với Python. Hơn nữa, C có thể được biên dịch ở chế độ tối ưu hóa để có hiệu suất tốt hơn.

Python chậm hơn Java bao nhiêu lần?

Để so sánh tốc độ thời gian chạy của hai ngôn ngữ lập trình, chẳng hạn như Java và Python, lập trình viên phải tập trung vào các triển khai cụ thể. Với ý nghĩ đó, Java nhanh hơn nhiều so với Python . Trong lịch sử, Java nhanh hơn tới hơn 25 lần, nhưng điều đó đã thay đổi sau khi phát hành Python 3.

Python có tốc độ chậm không?

Không giống như các ngôn ngữ lập trình phổ biến khác bao gồm C# hoặc JAVA, Python là ngôn ngữ được nhập động và thông dịch. Nó chậm chủ yếu là do bản chất năng động và tính linh hoạt của nó .

C++ có chậm hơn Python không?

C++ nhanh hơn Python vì nó được nhập tĩnh, dẫn đến việc biên dịch mã nhanh hơn. Python chậm hơn C++, nó hỗ trợ gõ động và nó cũng sử dụng trình thông dịch, khiến quá trình biên dịch chậm hơn.

Chủ Đề