Hướng dẫn can python be as fast as c? - python có thể nhanh như c?

Làm thế nào bạn có thể tăng cường hiệu suất của mã python của bạn mà không cần thay đổi một thứ.

Hình ảnh của Onur Ömer Yavuz từ Pixabay

Là một nhà nghiên cứu tiến sĩ, điều quan trọng đối với công việc của tôi là nhanh chóng mã hóa một ý tưởng để xem nó có hoạt động hay không. Python là một công cụ tuyệt vời cho phép điều đó. Nó cho phép tập trung vào chính ý tưởng và không bị làm phiền với mã Boilerplate và những thứ tẻ nhạt khác. a PhD researcher, it is crucial for my job to quickly code up an idea to see if it works or not. Python is an excellent tool enabling just that. It allows for focusing on the idea itself and not be bothered with boilerplate code and other tedious things.

Tuy nhiên, Python đi kèm với một nhược điểm lớn: nó chậm hơn nhiều so với các ngôn ngữ được biên dịch như C hoặc C ++. Vì vậy, chúng tôi phải làm gì sau khi chúng tôi thử nghiệm một ý tưởng bằng cách xây dựng một nguyên mẫu Python và bây giờ chúng tôi muốn biến nó thành một công cụ nhanh và hiệu suất? Thông thường hơn là không, cuối cùng chúng ta thực hiện hai lần công việc và chuyển đổi mã Python thành C. Liệu có phải là tuyệt vời không, nếu bản thân nguyên mẫu Python của chúng ta có thể chạy nhanh hơn? Tất cả thời gian dành cho việc thực hiện mọi thứ hai lần có thể được sử dụng cho một cái gì đó có ý nghĩa và thú vị hơn.It is much slower than compiled languages like C or C++. So, what do we do after we tested an idea by building a Python prototype and now we want to turn it into a fast and performant tool? Most often than not, we end up doing twice the work and manually converting the Python code into C. Wouldn’t it be great, if our Python prototype itself could run faster? All the time spent on implementing everything twice could be used for something more meaningful and fun.

May mắn thay, tôi tình cờ thấy một giải pháp cho vấn đề: Pypy, một sự thay thế nhanh chóng cho Python.PyPy, a fast alternative to Python.

Để minh họa số lượng PYPY tăng tốc có thể cung cấp, tôi đã chạy cả trình thông dịch python mặc định và pypy trên ví dụ sau:

Về cơ bản, tập lệnh cộng thêm tất cả các số nguyên từ 0 đến 100.000.000 trong một vòng lặp và in một thông báo và thời gian chạy tập lệnh của bạn bất cứ khi nào nó kết thúc.

Mặc dù không phải là một đánh giá khoa học, ví dụ minh họa vẫn là tâm trí. So với trình thông dịch Python mặc định, cần khoảng 10 giây, PYPY hoàn thành việc thực hiện chỉ sau hơn 0,22 giây! Ngoài ra, lưu ý rằng chúng tôi chỉ có thể cung cấp mã Python của chúng tôi để pypy mà không có bất kỳ thay đổi nào. Kết quả càng trở nên ấn tượng hơn khi bạn so sánh nó với C, bậc thầy về tốc độ. Trên máy tính của tôi, việc triển khai tương đương trong C mất 0,32 giây. Mặc dù C vẫn là bậc thầy về tốc độ nói chung, PYPY có thể đánh bại C trong một số trường hợp.PyPy finishes its execution after just over 0.22 seconds! Also, note that we can just feed our Python code to PyPy without any changes. The result becomes even more impressive when you compare it to C, the master of speed. On my computer, the equivalent implementation in C takes 0.32 seconds. Although C remains the master of speed in general, PyPy can beat C in some cases.

Nếu bạn muốn mã của mình chạy nhanh hơn, có lẽ bạn chỉ nên sử dụng pypy. - Guido Van Rossum (Người tạo Python) Nguồn: Youtu.be/2wdvzy6HGXG?t
— Guido van Rossum (creator of Python)
Source: youtu.be/2wDvzy6Hgxg?t=1012

PYPY kém hiệu quả khi chương trình của chúng tôi nhanh chóng hoặc khi hầu hết thời gian chạy được dành cho các cuộc gọi đến các thư viện không phải là Python. Tuy nhiên, nếu chúng ta có một chương trình chậm trong đó phần lớn thời gian được thực hiện để thực hiện mã Python, Pypy có thể làm nên điều kỳ diệu.

Tại sao Pypy lại nhanh như vậy?

Đây là câu hỏi mà bạn có thể tự hỏi mình nếu bạn đang vấp ngã lần đầu tiên, và đúng như vậy. Có vẻ như phép thuật ngay từ đầu. Chúng tôi đang chạy cùng một mã chính xác và với PYPY có được tốc độ lớn dường như miễn phí.

Mặc dù mã hoàn toàn giống nhau, nhưng làm thế nào mã được thực thi không thể khác nhau hơn. Bí mật đằng sau việc tăng hiệu suất PYPY, là tổng hợp đúng lúc, tóm tắt tổng hợp JIT.just-in-time compilation, JIT compilation for short.

Nhưng hãy để Lừa làm nó từ từ.

Biên soạn trước thời gian

Các ngôn ngữ lập trình như C, C ++ nhưng cũng Swift, Haskell, Rust, và nhiều ngôn ngữ khác được biên soạn trước thời gian. Điều này có nghĩa là sau khi bạn viết một số mã bằng các ngôn ngữ đó, bạn nhấn một nút và trình biên dịch chuyển đổi mã nguồn thành mã có thể đọc được bằng máy, có thể đọc được bởi một kiến ​​trúc máy tính cụ thể. Bất cứ khi nào chương trình được thực thi, mã nguồn ban đầu của bạn đã biến mất từ ​​lâu. Tất cả những gì được thực thi là mã máy.compiled ahead-of-time. This means that after you wrote some code in those languages, you hit a button and a compiler converts the source code into machine-readable code, readable by one specific computer architecture. Whenever the program is executed, your original source code is long gone. All that is executed is the machine code.

Biên dịch trước thời gian chuyển đổi các tệp nguồn thành mã máy.

Giải thích ngôn ngữ

Python, JavaScript, PHP và các ngôn ngữ tương tự có một cách tiếp cận khác. Họ được giải thích. So với chuyển đổi mã nguồn thành mã máy, nguồn vẫn còn nguyên vẹn. Mỗi khi chương trình được chạy, một trình thông dịch, hãy nhìn vào dòng mã từng dòng và chạy nó cho chúng tôi.

Một thông dịch chạy một dòng chương trình từng dòng.

Trong trường hợp của JavaScript, một thông dịch viên được tích hợp vào mọi trình duyệt web. Trình thông dịch Python tiêu chuẩn được gọi là Cpython. Tuy nhiên, điều rất quan trọng là phân biệt giữa Python ngôn ngữ và điều chạy mã của chúng tôi, Cpython. Điều đó bởi vì chúng ta có thể có tất cả các công cụ hoàn toàn khác nhau với khả năng chạy mã Python. Đây là nơi Pypy đi vào bức tranh.

Tổng hợp trong thời gian

PYPY là một triển khai thay thế của Python khai thác việc biên dịch đúng lúc. Điều gì xảy ra là Pypy bắt đầu giống như một thông dịch chạy mã Python của chúng tôi trực tiếp từ các tệp nguồn. Tuy nhiên, thay vì chạy từng dòng mã, PYPY biên dịch các phần của mã vào mã máy ngay trước khi nó thực thi chúng, đúng lúc để nói.

Tổng hợp JIT kết hợp tổng hợp và giải thích trước thời gian.

Theo nghĩa này, tổng hợp JIT là sự kết hợp giữa diễn giải và biên soạn trước thời gian. Chúng tôi đạt được hiệu suất của việc biên dịch trước thời gian và tính linh hoạt và tính sẵn sàng đa nền tảng của các ngôn ngữ được giải thích.

Làm thế nào bạn có thể hưởng lợi từ Pypy?

Bây giờ chúng tôi đã hiểu làm thế nào Pypy đạt được sự gia tăng hiệu suất đáng kinh ngạc, chúng tôi muốn sử dụng nó. PYPY có sẵn miễn phí tại pypy.org và dễ cài đặt. Ngoài ra, chính công cụ này, trang web chứa rất nhiều mẹo và thủ thuật để tinh chỉnh chương trình Python của bạn để tăng thêm hiệu suất. Vì Pypy chỉ là một triển khai thay thế của Python, hầu hết thời gian nó chỉ hoạt động ngoài hộp mà không có bất kỳ thay đổi nào đối với dự án Python của bạn. Nó hoàn toàn tương thích với khung web Django, gói điện toán khoa học Numpy và nhiều gói khác. Nó đã tiết kiệm cho tôi vô số giờ tái tạo các nguyên mẫu của tôi trong C và tôi sẽ muốn bỏ lỡ nó từ bộ công cụ lập trình của tôi.

Tìm thấy câu chuyện này thú vị? Bạn có thể hỗ trợ bài viết của tôi bằng cách trở thành thành viên trung bình ở đây: Medium.com/@mmsbrggr/membership. Bạn sẽ nhận được quyền truy cập vào tất cả các phương tiện và một phần phí thành viên của bạn sẽ trực tiếp hỗ trợ bài viết của tôi.

Hãy tiếp cận với tôi với các câu hỏi riêng tư và ý kiến ​​về LinkedIn. Nếu bạn thích bài đăng, hãy để tôi biết bạn biết về bản tin của tôi: marcelmoos.com/newsletter.

Python có chậm so với C không?

Mã Python bên trong được giải thích trong thời gian chạy thay vì được biên dịch thành mã gốc do đó nó chậm hơn một chút.Chạy tập lệnh Python V/S chạy mã C/C ++: Python: Đầu tiên nó được biên dịch thành mã byte.Mã byte này sau đó được giải thích và thực thi bởi PVM (máy ảo Python).it is a bit slower. Running of Python script v/s running of C/C++ code: Python: First it is compiled into Byte Code. This Byte Code is then interpreted and executed by the PVM (Python Virtual Machine).

Python có chạy nhanh hơn C ++ không?

C ++ nhanh hơn Python vì nó được gõ 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, điều này làm cho quá trình biên dịch chậm hơn. because it is statically typed, which leads to a faster compilation of code. Python is slower than C++, it supports dynamic typing, and it also uses the interpreter, which makes the process of compilation slower.

Python có thể chạy nhanh không?

Mặc dù có nhiều phẩm chất này, Python có một nhược điểm, đó là tốc độ chậm.Là một ngôn ngữ được giải thích, Python chậm hơn các ngôn ngữ lập trình khác.slow speed. Being an interpreted language, python is slower than other programming languages.

Có cái gì đó nhanh hơn C không?

Đây là lý do tại sao Fortran thường nhanh hơn C. Đây là lý do tại sao các thư viện số vẫn được viết bằng Fortran.Tuy nhiên, nó đến với chi phí của số học con trỏ.Fortran is often faster than C. This is why numerical libraries are still written in Fortran. However, it comes at the cost of pointer arithmetic.