Tại sao java nhanh hơn nhiều so với python?

Về một số điều bạn sẽ nghe thấy, có một câu kinh điển “không có ngôn ngữ nào nhanh hơn hay chậm hơn, nó phụ thuộc vào mục đích bạn muốn sử dụng nó, một số ngôn ngữ phù hợp hơn những ngôn ngữ khác”. Trong khi một phần là đúng [một số ngôn ngữ phù hợp với một số nhiệm vụ hơn những ngôn ngữ khác], phần còn lại là sai. Có ngôn ngữ nhanh hơn và chậm hơn. Đó là một sự thật

Một điều khác mà tôi nghe được là “Java là một ngôn ngữ được biên dịch và Python được thông dịch, do đó, Java nhanh hơn nhiều”. Cũng sai. Java được hiểu là Python, hay Python được biên dịch là Java. Cả hai ngôn ngữ đều biên dịch [hoặc dịch mã] thành mã byte và sau đó, trình thông dịch sẽ thực thi các lệnh đó

Nhưng Java có JIT. Chà, và PyPy cũng có JIT. Vậy thì sao?

Và Java cũng không cũ hơn Python, cả hai đều bằng tuổi nhau ít nhiều

Bất kể bất kỳ nhận xét và phản đối điển hình nào, thực tế là Java chậm hơn 4 lần so với C và Python chậm hơn 40 lần so với Java [nhiều hay ít, phụ thuộc rất nhiều vào điểm chuẩn]. [Còn cái C cũ ko có JIT hả bạn. ]

Vậy tại sao Java lại nhanh hơn Python?

Đó chỉ là vì Java thúc đẩy nhà phát triển làm việc và chịu trách nhiệm nhiều hơn Python. Đây chỉ là sự đánh đổi giữa hiệu suất máy tính và hiệu suất của nhà phát triển. Sao có thể như thế được?

Đầu tiên, chúng ta phải hiểu trình biên dịch làm gì và tối ưu hóa hoạt động như thế nào. Trình biên dịch về cơ bản phục vụ một mục đích cơ bản và nó không tạo ra mã thực thi hoặc mã byte. Mục đích là để giải quyết càng nhiều công việc càng tốt trước. Là một tác dụng phụ, nó phải viết một mã thực thi hoặc mã byte mà sau này có thể đọc được để làm theo hướng dẫn. Nói rõ hơn, công việc của trình biên dịch là loại bỏ sự phức tạp và không chắc chắn khỏi mã nguồn và viết một đầu ra càng ngớ ngẩn càng tốt để nó có thể được theo dõi một cách mù quáng. Bạn càng xóa nhiều thứ, càng về sau càng nhanh

Loại công cụ nào chúng ta có thể loại bỏ hoặc đơn giản hóa cho sau này? . Sau đó, sẽ làm những công việc toán học đơn giản trước thời hạn. Cũng loại bỏ mã chết

Nhưng từ đây nó trở nên khó khăn. Đối với CPU xử lý các hướng dẫn, chúng tôi cần biết trước những gì chúng tôi đang làm, loại dữ liệu nào, kích thước, loại kết quả dự kiến, v.v. Tùy thuộc vào ngôn ngữ, điều này có thể xảy ra nhưng với Python thì không. Nó có quá nhiều trừu tượng và điên rồ sẵn có mà chúng ta không bao giờ có thể biết những gì sẽ xảy ra ở một phần cụ thể của chương trình. Mọi biến, ngay cả khi nó trông đơn giản, đều có thể được thay thế bằng một thứ khác bằng cách chế nhạo hoặc các loại kỹ thuật kỳ lạ khác trong Python. Vì vậy, cách duy nhất là bọc các giá trị Python trong một cấu trúc phức tạp có thể theo dõi tất cả những thay đổi đó. Khi làm như vậy, chúng tôi mất tất cả hiệu suất đang chạy để trở thành một ngôn ngữ thân thiện hơn [và điên rồ hơn]

Java có kiểu gõ tĩnh và điều này giúp ích rất nhiều trong việc dịch tất cả các hướng dẫn thành hướng dẫn CPU thực. Nhưng để hoàn thành bước đó, chúng ta cần một bản tổng hợp Just In Time [JIT];

Nhưng C nhanh hơn. Thủ thuật của nó là chuyển nhiều gánh nặng hơn từ ngôn ngữ sang nhà phát triển. Trong trường hợp này, chúng tôi không chỉ yêu cầu nhà phát triển nhập mọi thứ và xác định trước mọi hành vi; . Vì vậy, trong C, nếu một chương trình đóng đột ngột không bao giờ là lỗi của C, nhà phát triển luôn có trách nhiệm kiểm tra mọi thứ

Điều này trong C được gọi là “Hành vi không xác định” và mô tả những vùng màu xám mà trình biên dịch C chỉ “không quan tâm”, nó sẽ cho rằng mọi thứ đều tốt và tối ưu hóa hết mức có thể. Trình biên dịch C thậm chí có thể thay thế các lệnh gọi hàm bằng kết quả mong đợi trên tệp thi hành cuối cùng. Nó cũng có thể quyết định "bỏ đăng ký" một hàm vào trình gọi vì nó tin rằng đó là kết quả tương tự và nhanh hơn

Vì vậy, tóm lại, tính linh hoạt của một ngôn ngữ và “phép thuật tự động” của nó có sự đánh đổi rất lớn về hiệu suất. Viết trình thông dịch hoặc trình biên dịch Java nhanh hơn Python sẽ dễ dàng. Nhưng viết một trình thông dịch Python có thể đủ nhanh để so sánh với Java là gần như không thể

Tôi muốn thêm một đề cập đặc biệt đến JavaScript, có lẽ là ngôn ngữ bị ghét nhất gần đây. Ít tự động hóa hơn Python một chút và có những nỗ lực to lớn để triển khai các công cụ JS nhanh hơn trong trình duyệt đã khiến JavaScript có JIT và nhiều loại tối ưu hóa, để lại cho chúng tôi một trong những ngôn ngữ được giải thích nhanh nhất tồn tại cho đến nay

https. //benchmarksgame-team. trang. debian. net/benchmarksgame/nhanh hơn/javascript. html

JavaScript thiếu hỗ trợ luồng, vì các trình duyệt không muốn các tập lệnh gây rối với chúng vì lý do bảo mật và ổn định. Tuy nhiên, nếu bạn cho rằng hầu hết các điểm chuẩn mà tôi đã chia sẻ trước đó thì Java đều sử dụng tất cả các CPU và chỉ một JavaScript, thì có vẻ như hiệu suất của JavaScript hơi gần với Java, điều này thật ấn tượng

Tuy nhiên, tôi sẽ không đề xuất [chưa] JavaScript cho các ứng dụng phía máy chủ. Nhưng dù sao đó cũng là một kết quả thú vị khi trở thành ngôn ngữ kịch bản tiêu chuẩn duy nhất trên web

Python có bao giờ nhanh hơn Java không?

Để 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 chậm hơn bao nhiêu so với Java?

Các chương trình Python thường chạy chậm hơn các chương trình Java, nhưng chúng cũng mất ít thời gian hơn để phát triển. Các chương trình Python thường ngắn hơn 3-5 lần so với các chương trình Java tương đương . Sự khác biệt này có thể là do các kiểu dữ liệu cấp cao tích hợp sẵn của Python và kiểu gõ động của nó.

Chủ Đề