Python chậm hơn bao nhiêu so với Java?

Python và Java là hai trong số các ngôn ngữ lập trình phổ biến và mạnh mẽ nhất. Java thường nhanh hơn và hiệu quả hơn Python vì đây là ngôn ngữ được biên dịch. Là một ngôn ngữ thông dịch, Python có cú pháp đơn giản, ngắn gọn hơn Java. Nó có thể thực hiện chức năng tương tự như Java với ít dòng mã hơn

Sự khác biệt về tốc độ và hiệu quả giữa Python so với. Java

Hiệu quả của Java phần lớn đến từ trình biên dịch Just-In-Time (JIT) và hỗ trợ đồng thời. Trình biên dịch JIT là một phần của Môi trường chạy thi hành Java. Nó cải thiện hiệu suất của các chương trình Java bằng cách biên dịch mã byte thành mã máy gốc “đúng lúc” để chạy. Máy ảo Java (JVM) gọi mã được biên dịch trực tiếp. Vì mã không được diễn giải nên việc biên dịch không yêu cầu thời gian của bộ xử lý và mức sử dụng bộ nhớ. Về mặt lý thuyết, điều này có thể làm cho một chương trình Java nhanh như một ứng dụng gốc

Trong khi các chương trình Java được biên dịch trực tiếp, Python được giải thích làm chậm các chương trình Python trong thời gian chạy. Việc xác định loại biến xảy ra trong thời gian chạy sẽ làm tăng khối lượng công việc của trình thông dịch. Ngoài ra, việc ghi nhớ loại đối tượng của các đối tượng được truy xuất từ ​​các đối tượng vùng chứa góp phần vào việc sử dụng bộ nhớ

Sửa lỗi trong Python vs. Java

Trong Python, bất kỳ lỗi nào do lập trình viên đưa ra sẽ không được tìm thấy cho đến khi dòng mã đó được kích hoạt. Điều này có thể gây rủi ro cho sự cố hoạt động và kéo dài thời gian quay vòng. Trong khi Python khiến các đối tượng dễ bị đột biến, thì trong Java, đột biến đối tượng là không thể. Điều này dẫn đến việc phát triển phần mềm an toàn

Các nền tảng tích hợp như SnapLogic cho phép Python và Java giải quyết vấn đề cùng nhau. SnapLogic cung cấp các công cụ để kết nối các nguồn dữ liệu và ứng dụng phần mềm đám mây, tại chỗ và kết hợp khác nhau. Tìm hiểu thêm về kịch bản python so với. lập trình và so sánh SnapLogic với các nền tảng tích hợp khác

Hỏi tại sao Python chậm hơn Java/C# là không thực sự chính xác. Java nhanh như thế nào? . Tôi tin rằng có một trình thông dịch mã byte Java được viết bằng JavaScript - có thể không nhanh lắm. Vì vậy, câu hỏi dự định có vẻ là "Tại sao hệ thống ngôn ngữ CPython chậm hơn so với Sun, IBM và Oracle JRE và Microsoft tương đương. NET?"

Tôi tin rằng câu trả lời đúng là phi kỹ thuật. Java nhanh nhất và. NET nhanh hơn vì họ có các nhóm kỹ thuật toàn thời gian lớn phát triển chúng trong môi trường cạnh tranh về hiệu suất

Hệ thống ngôn ngữ động dễ thực hiện. Bất kỳ kẻ ngốc nào cũng có thể làm được. Tôi có. Hệ thống ngôn ngữ tĩnh phức tạp hơn để thiết kế và thực hiện. Một hệ thống tĩnh đơn giản sẽ có xu hướng chạy nhanh hơn nhiều so với hệ thống động vừa hoạt động tương đương. Tuy nhiên, các hệ thống động được tối ưu hóa cao có thể chạy nhanh gần như. Tôi hiểu rằng một số triển khai Smalltalk khá tốt. Một ví dụ thường được trích dẫn về một hệ thống động đã phát triển là MIT Lisp Machine

Ngoài ra, nếu tiếng càu nhàu thực sự được thực hiện bằng mã thư viện, thì hệ thống ngôn ngữ có thể không thành vấn đề. Ngoài ra, ngôn ngữ có thể khuyến khích (hoặc cho thời gian(. )) để phát triển các thuật toán hiệu quả hơn, có thể dễ dàng loại bỏ sự khác biệt về hiệu suất của yếu tố không đổi

Ngay khi tôi bắt đầu nghĩ về bài viết này, nguồn cấp dữ liệu Phương tiện của tôi tạo ra một bài đăng vui nhộn “Python không thực sự chậm” - Tôi đã đọc nó mặc dù tôi biết nó không đúng và chỉ là một cú nhấp chuột. Khi nói đến Python, bạn đang đối phó với một con ốc sên, và trong khi bạn có thể huấn luyện một con ốc sên, bạn không thể thoát khỏi di truyền học cơ bản của nó (không giống như Ethan Hawke trong bộ phim kinh điển Gattaca)

điểm chuẩn

Tôi bắt đầu viết một số điểm chuẩn đơn giản để kiểm tra chéo bằng C, Rust, Java và Python. Tôi nghĩ các hạng mục chính để đánh giá

  • Quản lý áp lực bộ nhớ (tạo/hủy đối tượng)
  • Xử lý chuỗi như JSON
  • Vòng lặp và hoạt động tính toán chuyên sâu

Để tham khảo, có một dự án GitHub tuyệt vời đánh giá hiệu suất trên hơn chục ngôn ngữ. Bảng tóm tắt được bao gồm bên dưới và nếu C ++ là đường cơ sở là 1, thì Python chậm hơn gấp 227 lần trong bài kiểm tra brainf (đây là một trình thông dịch Turing Machine khá thú vị)

Phép lịch sự của dự án github bởi Kostya M

Tôi bắt đầu viết các bài kiểm tra đoạn trích siêu cơ bản vì tôi nhận ra rằng mình đã quên cách lập trình bằng hầu hết các ngôn ngữ này. Tôi đã phải thiết lập lại tham vọng của mình để phù hợp với những kỹ năng yếu ớt của mình

© Doug Foo LabsThông tin chi tiết từ kết quả kiểm tra

Tôi sẽ liên kết với GitHub của mình cho các bài kiểm tra thực sự khó hiểu trong phần Tài liệu tham khảo. Tôi hy vọng việc đặt tên là tự giải thích

Đây là những bài học của tôi trên các ngôn ngữ

  1. I/O tệp Python tương đối nhanh do yếu tố giới hạn là đĩa
  2. Python chậm một cách bất thường khi đệ quy, thực hiện một Fibonacci đệ quy trở nên chậm một cách khó tin khi chỉ fib(30)
  3. Lệnh gọi hàm Python chậm — góp phần gây ra vấn đề đệ quy
  4. Java w/o Tối ưu hóa JIT có thể rất chậm, thậm chí chậm hơn Python đối với một số thứ
  5. Chuỗi gốc Java + vẫn chậm chết người (100 lần), sử dụng StringBuilder làm cho nó khá nhanh, nhưng chậm hơn Python
  6. Java w/ JIT ngày nay khá nhanh, hầu như không còn giá trị sử dụng C nữa…
  7. Rust rất nhanh, có thể nhanh hơn nếu tôi biết cách viết mã trong đó tốt hơn…

Điểm chuẩn chậm hơn 200 lần chưa được chứng minh trong bộ công cụ nhỏ của tôi, nhưng rõ ràng, một vài lệnh gọi hàm và truy hồi bổ sung và bạn sẽ dễ dàng đạt được điều đó

Vậy tại sao Python lại chậm?

Hầu hết mọi thứ đều rõ ràng nhưng hãy để tôi liệt kê chúng

  1. Python được giải thích và trong khi được biên dịch theo byte, nó không thực sự được tối ưu hóa
  2. Nó được thu thập rác, nhưng nó chủ yếu sử dụng cách đếm tham chiếu nên nhanh hơn một chút hoặc ít nhất là mang tính quyết định hơn Java
  3. Theo mặc định, nó không có trình biên dịch JIT — dường như rất quan trọng đối với một ngôn ngữ được thông dịch (PyPy sử dụng điều này để tăng tốc cho nó gấp 10 lần)
  4. Là một ngôn ngữ động chưa được định dạng có những điểm chậm (và khiến việc xây dựng JIT trở nên khó khăn hơn)
  5. Việc triển khai các lệnh gọi hàm chậm một cách bất thường (có lẽ một số phức tạp phân bổ khung ngăn xếp?)

Lưu ý rằng chúng tôi thậm chí không kiểm tra đa luồng hoặc đa lập trình vì chúng tôi đều biết Python cũng có vấn đề về GIL (Khóa phiên dịch toàn cầu)

Cách tối ưu hóa Python

Có một số thủ thuật để tăng tốc Python, nhưng hầu hết đều không tuyệt vời như vậy

  1. Sử dụng đa xử lý để sinh ra công nhân (nhưng hãy cẩn thận, bạn sẽ bị giới hạn bởi GIL )
  2. Viết mã C gốc và liên kết nó với Python
  3. Sử dụng các hàm Python gốc (được viết trong thời gian chạy bằng C)
  4. Khả năng hiểu danh sách 1 dòng dường như được tối ưu hóa hiệu suất nên có vẻ như chúng không chỉ là những thủ thuật hay

Thành thật mà nói, tôi không thấy nhiều mẹo hay… một số mẹo như “sử dụng thuật toán O(n) và O(n-log n) thay vì O(n²)”… có lẽ mẹo đầu tiên là nghiên cứu một số máy tính

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.

Java có nhanh hơn nhiều so với Python không?

Java và Python là hai ngôn ngữ lập trình phổ biến nhất. Trong hai ngôn ngữ này, Java là ngôn ngữ nhanh hơn , nhưng Python thì đơn giản và dễ học hơn.

Tại sao Python không nhanh hơn Java?

Về tốc độ, Java nhanh hơn Python vì đây là ngôn ngữ được biên dịch. Mất ít thời gian hơn để thực thi mã. Python là một ngôn ngữ được thông dịch và nó xác định loại dữ liệu trong thời gian chạy, điều này làm cho nó chậm hơn một cách tương đối .

Python có phải là ngôn ngữ chậm nhất không?

Python là một trong những ngôn ngữ lập trình chậm nhất khi so sánh với các ngôn ngữ khác như Java, C#, Go, JavaScript và C++. Có một số loại trình biên dịch có sẵn, bao gồm JIT (C# và Java), AOT (C và C++) và các ngôn ngữ thông dịch như JavaScript.