Ngôn ngữ lập trình. Python chậm, nhưng nó sắp trở nên nhanh hơn

Vì tính đơn giản, khả năng thích ứng và hàng nghìn thư viện hữu ích cho khoa học dữ liệu, Python cực kỳ phổ biến. Tuy nhiên, một nhược điểm là nó không đặc biệt nhanh.  

Trăn 3. 11, hiện đang ở giai đoạn thử nghiệm đầu tiên của bản xem trước (phiên bản 3), sắp thay đổi điều đó. Trước khi phát hành ổn định vào cuối năm nay, 11. 0b1)Tại hội nghị PyCon 2022 tuần này, các nhà phát triển cũng đã cho thấy sự tiến bộ về mục tiêu chạy mã Python trong trình duyệt. Nhà phát triển Core Python (CPython) Mark Shannon đã cung cấp thông tin liên quan đến dự án tăng tốc Python

Người tạo Python Guido van Rossum và dự án Python Software Foundation (PSF) của Shannon để làm cho Python nhanh gấp đôi so với phiên bản ổn định hiện tại 3. 10 series được tài trợ bởi Microsoft vào năm ngoái. Mục tiêu là tác động đến Python để hoạt động tương tự như C

HIỂU.  

Van Rossum đã tuyên bố tại hội nghị PyCon 2021 rằng anh ấy "đã chọn quay trở lại cội nguồn của mình" và sẽ làm việc với sự thiếu hiệu suất khét tiếng của Python" sau khi được Microsoft thuê vào năm 2020 và được tự do chọn bất kỳ dự án nào.  

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 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, vì vậy hiệu suất có thể không phải là ưu tiên hàng đầu .  

Hiệu suất của CPython 3. 11 so với năm trước đã được cập nhật bởi Faster CPython Project. Dự án đã công bố những phát hiện bổ sung trước PyCon 2022 so sánh 3. 11 beta xem trước đến 3. Nhiều số liệu hiệu suất đã đưa ra 3. 11 trên 10, chứng tỏ rằng 25 lần nhanh hơn 3. 1.  

Shannon thực tế về tiềm năng của dự án để tăng hiệu suất của Python, nhưng những cải tiến có thể cho phép Python chạy hiệu quả hơn trên các máy ảo

Mặc dù thực tế là 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 ông đã viết trong một bài báo trước đó vào năm ngoái, "Chúng tôi muốn nó cạnh tranh với các ngôn ngữ kịch bản triển khai nhanh, như V8 . "

Đặc biệt, "Chúng tôi muốn 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, bằng cách đạt được các mục tiêu hiệu suất này với CPython. "

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 tích cực, 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" là chiến lược chính được mô tả trong PEP 659

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" để tránh chi phí thời gian này, vì người ta đã lưu ý rằng việc tối ưu hóa VM là "tốn kém", thường đòi hỏi thời gian "khởi động" lâu. Do đó, trình thông dịch cần liên tục tối ưu hóa và hủy tối ưu hóa rất rẻ.  

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. Đ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.  

Ngoài ra, 3. Mức sử dụng bộ nhớ của 11 không thay đổi so với 3. mười

HIỂU.   

Theo báo cáo của Tổ chức Phần mềm Python về sự kiện này, Shannon cho biết trình biên dịch just-in-time (JIT) cho hiệu suất của Python không phải là ưu tiên hàng đầu và rất có thể sẽ không xuất hiện cho đến Python 3. 13.  

Dự án Pyston, một triển khai Python hứa hẹn cải thiện tốc độ so với Python, được hỗ trợ bởi Anaconda, công ty đã tạo ra bản phân phối Anaconda Python cho khoa học dữ liệu

Dự án Numba, trình biên dịch JIT dựa trên LLVM cho CPython, là một trong những nỗ lực cũ của Anaconda để tăng tốc Python. Nó tăng tốc các chức năng Python số chạy trên CPU hoặc GPU, nhưng nó không thể tối ưu hóa toàn bộ chương trình hoặc 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.    

Kế hoạch triển khai Faster Python nói rằng Python 3. 12 có thể nhận được "trình biên dịch JIT đơn giản cho các vùng nhỏ" để biên dịch các phần nhỏ của mã chuyên biệt, trong khi Python 3. Trình biên dịch sẽ được cải thiện vào năm 13 để mở rộng các vùng 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.  

HIỂU.  

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

HIỂU.   

Đố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.  

Nếu bạn thắc mắc tại sao Python chậm hơn các ngôn ngữ lập trình khác, bạn đã đến đúng nơi. Trong bài viết này, chúng ta hãy xem xét những lý do đằng sau sự chậm chạp của ngôn ngữ lập trình Python. Hãy đi sâu vào ngay

Python có thực sự chậm không?

Python là ngôn ngữ bậc cao so với C++ và Java. Ngôn ngữ cấp cao trừu tượng hóa các chi tiết của máy tính cho lập trình viên, bao gồm quản lý bộ nhớ, con trỏ, quy trình, luồng, v.v. Sự trừu tượng hóa này đơn giản hóa và tăng tốc quá trình mã hóa khi nó trở nên gần gũi hơn với những gì con người nghĩ

Python gần với ngôn ngữ của con người hơn, trong khi Java và C++ là những ngôn ngữ cấp thấp tương đối gần với phần cứng hơn. Mã càng gần phần cứng thì càng nhanh

Why Is Python Slow?

Như các lập trình viên nói, mã C++/Java chạy nhanh hơn mã Python nhiều lần. Nhưng nếu bạn xem xét thời gian phát triển, Python gần như đánh bại hầu hết các ngôn ngữ

Đối với một số dự án, thời gian phát triển quan trọng hơn thời gian chạy nếu bạn xem xét chi phí phát triển. Vì vậy, về cơ bản, chúng ta không thể bỏ qua Python do thời gian thực thi chậm

Hầu hết thời gian, bạn thậm chí sẽ không nhận thấy sự chậm chạp của Python khi thực thi. Khi bạn xây dựng một dự án, điều quan trọng là phát triển ứng dụng dễ dàng nhất có thể. Nhưng đối với một số dự án, trong đó thời gian chạy phải nhanh hơn, thì tốt hơn là sử dụng Java hoặc C++ thay vì Python

Câu chuyện YouTube

Python đánh bại nhiều ngôn ngữ khác mặc dù chậm hơn chúng. Ví dụ: nhiều năm trước, Google đã tạo nền tảng video của riêng mình bằng C++. Đồng thời, YouTube là một công ty khởi nghiệp và nó đang sử dụng Python

Mặc dù Google có nhiều nhân viên và tài nguyên hơn YouTube, nhưng nó không thể cạnh tranh với YouTube. YouTube có thể đưa ra nhiều tính năng và bản cập nhật mới hơn vì thời gian phát triển ít hơn khi sử dụng Python

Google Video không thể theo kịp điều đó vì chúng không thể triển khai các tính năng nhanh như YouTube. Cuối cùng, Google không còn lựa chọn nào khác ngoài việc mua lại YouTube

Vì vậy bạn không thể nói Python chậm và không sử dụng nó. Vâng, khi nói đến thời gian thực thi mã, Python chậm hơn các ngôn ngữ khác như Java và C ++

Tại sao Python lại chậm khi thực thi?

Bây giờ đến với chủ đề này, hãy để chúng tôi hiểu tại sao Python lại chậm trong thời gian thực thi

1. Python là một ngôn ngữ thông dịch

Mã Python thực thi chậm vì mã được diễn giải trong thời gian chạy thay vì được biên dịch tại thời điểm biên dịch. Vì Python là ngôn ngữ cấp cao và thân thiện với con người nên mã Python cần phải trải qua nhiều giai đoạn trừu tượng hóa trước khi có thể trở thành mã máy thực thi được.

Khi bạn thực thi mã Python, mã sẽ được biên dịch thành mã byte Python. Mã byte là mã cấp thấp hơn được thực thi nhanh hơn. Máy ảo Python sẽ thực thi từng mã byte một

Python program execution

Trong các ngôn ngữ như C hoặc C++, mã được chuyển đổi thành mã nhị phân có thể thực thi được trong quá trình biên dịch và do đó, nó hiệu quả hơn

c program execution

2. Không có trình biên dịch Just In Time (JIT)

Các ngôn ngữ thông dịch khác như Java và. NET chạy mã byte Java tương ứng của chúng và. NET bytecode nhanh hơn mã byte của Python. Điều này là do bản phân phối chuẩn của Java/. NET có trình biên dịch JIT chuyển đổi mã byte thành mã gốc (ngôn ngữ máy) khi chạy

Python chậm hơn các tính năng này và hoạt động khác đi. Trình biên dịch Just in Time, như đã nói ở trên, chuyển đổi mã byte thành ngôn ngữ máy có thể hiểu được trên máy tính và cung cấp hướng dẫn cho CPU. Python không thể có trình biên dịch JIT do cấu trúc động của nó

Dự kiến ​​thời gian thực thi Python sẽ nhanh hơn trong các bản cập nhật trong tương lai, nhưng sẽ mất một thời gian trước khi Python có trình biên dịch JIT sẵn có

3. Python là một ngôn ngữ được gõ động

Một trong những lý do khiến tốc độ Python chậm là vì nó là ngôn ngữ được gõ động. Hãy cho chúng tôi hiểu gõ động và gõ tĩnh trong lập trình là gì

Trong các ngôn ngữ như C++/Java, việc gán kiểu dữ liệu của biến diễn ra trong quá trình mã hóa khi người viết mã đề cập rõ ràng đến kiểu dữ liệu của biến. Điều này cũng tương tự đối với mảng. Quá trình này được gọi là gõ tĩnh

Bây giờ hãy đến với Python. Trong Python, chúng tôi không đề cập đến kiểu dữ liệu trong mã. Việc gán kiểu dữ liệu xảy ra trong thời gian thực hiện. Quá trình này được gọi là gõ động

Điều tương tự cũng xảy ra với các danh sách (mảng trong Python). Danh sách có một tùy chọn bổ sung có các loại dữ liệu khác nhau trong cùng một danh sách. Điều này làm cho nó mất nhiều thời gian hơn để thực hiện trong thời gian chạy

Vì vậy, các ngôn ngữ được nhập tĩnh tương đối nhanh hơn các ngôn ngữ được nhập động. Tuy nhiên, thời gian phát triển cho các ngôn ngữ kiểu động ít hơn và việc viết mã được đơn giản hóa

4. Khóa phiên dịch toàn cầu (GIL)

Trong Python, nếu hai luồng (hoặc hai đoạn mã riêng biệt) cố gắng truy cập vào một đối tượng cụ thể trong bộ nhớ cùng một lúc, chúng ta sẽ gặp sự cố. Python có Khóa phiên dịch toàn cầu (GIL) để tránh điều này

GIL là một loại khóa quy trình của Python trong khi xử lý các quy trình và luồng. GIL ngăn đa luồng bằng cách chỉ chạy một luồng trong một quy trình tại một thời điểm

Python có một khái niệm gọi là bộ đếm tham chiếu. Nó giúp chúng ta đếm tổng số tham chiếu được lấy trong nội bộ để gán giá trị cho một đối tượng. Khi số lượng bằng 0, đối tượng sẽ bị hủy đăng ký

Nếu không có bộ đếm tham chiếu, rò rỉ bộ nhớ có thể xảy ra khi đa luồng xảy ra (hai luồng cố gắng ghi các giá trị khác nhau vào đối tượng). Điều này thậm chí có thể gây ra bế tắc

Vì vậy, để tránh rò rỉ bộ nhớ và bế tắc, chúng tôi sử dụng Khóa phiên dịch toàn cầu. GIL cung cấp quản lý bộ nhớ an toàn theo luồng

Điều này nghe giống như một tính năng tuyệt vời, phải không? . GIL không ảnh hưởng đến hiệu suất của các chương trình đa luồng liên kết với I/O vì khóa được chia sẻ giữa các luồng trong khi chúng đang chờ I/O.  

Do đó, GIL ngăn đa luồng đối với các chương trình có luồng liên kết với CPU, làm chậm quá trình thực thi

Bạn thực sự có thể đạt được tính đa xử lý và đồng thời trong Python với sự trợ giúp của các mô-đun như đa xử lý, nhưng điều này khó so với các ngôn ngữ khác như C và Java

Làm thế nào bạn có thể làm cho Python chạy nhanh hơn?

Có nhiều biến thể của Python có sẵn. CPython là chậm nhất trong số đó vì nó không có trình biên dịch đúng lúc (JIT). Unladen Swallow là một dự án nhắm mục tiêu thêm trình biên dịch JIT vào CPython. Sự thành công của dự án này sẽ làm tăng tốc độ thời gian chạy của CPython lên rất nhiều.  

Chọn Jython hoặc IronPython thay vì CPython có thể giúp thời gian chạy của bạn nhanh hơn ở mức hợp lý. Họ có các máy ảo được tối ưu hóa mạnh mẽ trong phần phụ trợ (JVM và. NET CLR), giúp tăng tốc thời gian chạy đến một mức độ

Chúng tôi có thể cung cấp các trình thông dịch khác nhau cho mỗi quy trình chạy để một luồng duy nhất được cung cấp cho mỗi quy trình trong đa xử lý. Do đó, nó cho phép đa luồng và tăng tốc độ thời gian chạy

Nhiều khi, mã bị chậm có thể là do một số vấn đề khác. Vì vậy, hãy đảm bảo bạn sử dụng cấu trúc dữ liệu phù hợp và tối ưu hóa mã của mình

Suy nghĩ cuối cùng

Bạn không thể so sánh Python với C/C++ hay Java về tốc độ rồi nói nó không tốt được. Nó giống như so sánh một chiếc xe đua F1 với một chiếc xe tải tiện ích. Các trường hợp sử dụng và cơ chế làm việc của họ là khác nhau

Tốc độ không phải là tất cả khi bạn chọn ngôn ngữ lập trình. Nếu tốc độ là tất cả, mọi người sẽ sử dụng Assembly hoặc C để viết mã

Trong trường hợp của Python, có một số lý do quan trọng để từ bỏ một số tốc độ thực thi mã vì bạn nhận được rất nhiều tính linh hoạt, cú pháp dễ dàng và giảm thời gian phát triển

Tốt nhất là làm nền tảng và chọn ngôn ngữ lập trình phù hợp với tuyên bố vấn đề của bạn

Tôi hy vọng bạn tìm thấy bài viết hữu ích. Nếu bạn có bất kỳ điểm nào khác để thêm vào cuộc thảo luận này, hãy bình luận xuống bên dưới. Mã hóa vui vẻ

Python có trở nên nhanh hơn không?

Hứng thú với Python 3. 11 — Cuối cùng cũng đến lúc cải thiện hiệu suất đáng kể. Rõ ràng là Python không phải là ngôn ngữ lập trình nhanh nhất hiện có . Chà, điều đó sắp thay đổi, hoặc ít nhất là đi đúng hướng. Bản phát hành Python mới nhất — Python 3. 11 — dự kiến ​​phát sóng vào tháng 10 năm 2022.

Tại sao Python là một ngôn ngữ lập trình chậm?

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 tính năng động và tính linh hoạt của nó .

Tại sao Python là ngôn ngữ lập trình phát triển nhanh nhất?

Việc đọc và viết chương trình Python dễ dàng hơn nhiều so với các ngôn ngữ khác như. C++, Java, C# . Python làm cho việc lập trình trở nên thú vị và cho phép bạn tập trung vào giải pháp thay vì cú pháp.

Tại sao Python rất phổ biến mặc dù rất chậm?

Trong bài viết này, chúng ta sẽ xem lý do tại sao Python lại phổ biến mặc dù chậm như vậy. Python là ngôn ngữ lập trình cấp cao, hướng đối tượng, năng động và đa năng được tôi. e ngôn ngữ đa mô hình . Cú pháp, kiểu gõ động và bản chất diễn giải của Python làm cho nó trở thành một ngôn ngữ kịch bản xuất sắc.