Python có đa luồng như java không?

Phân luồng chỉ là một trong nhiều cách có thể xây dựng các chương trình đồng thời. Trong bài viết này, chúng ta sẽ xem xét phân luồng và một vài chiến lược khác để xây dựng các chương trình đồng thời trong Python, cũng như thảo luận về cách mỗi chiến lược phù hợp trong các tình huống khác nhau

Chia sẻ

Chia sẻ

Python có đa luồng như java không?

Phân luồng chỉ là một trong nhiều cách có thể xây dựng các chương trình đồng thời. Trong bài viết này, chúng ta sẽ xem xét phân luồng và một vài chiến lược khác để xây dựng các chương trình đồng thời trong Python, cũng như thảo luận về cách mỗi chiến lược phù hợp trong các tình huống khác nhau

Python có đa luồng như java không?

Bởi Marcus McCurdy

Chuyên gia đã được xác minh  về Kỹ thuật

Marcus là một lập trình viên tài năng và xuất sắc trong lĩnh vực phát triển back-end. Tuy nhiên, anh cảm thấy thoải mái với tư cách là một full stack developer

Không, nó không phải là một ý tưởng tốt. Đa luồng không thể thực hiện được trong Python do một thứ gọi là Khóa thông dịch viên toàn cầu. Một chương trình đa luồng chứa hai hoặc nhiều phần có thể chạy đồng thời và mỗi phần có thể xử lý một tác vụ khác nhau cùng một lúc giúp sử dụng tối ưu các tài nguyên có sẵn, đặc biệt khi máy tính của bạn có nhiều CPU. Đa luồng cho phép bạn viết theo cách mà nhiều hoạt động có thể tiến hành đồng thời trong cùng một chương trình

Python không cho phép đa luồng, nhưng nếu bạn muốn chạy chương trình của mình với tốc độ cần đợi thứ gì đó như IO, thì nó được sử dụng rất nhiều. trong khi gói luồng không thể cho phép bạn sử dụng thêm lõi CPU. Python không hỗ trợ đa luồng vì Python trên trình thông dịch Cpython không hỗ trợ thực thi đa lõi thực sự thông qua đa luồng. Tuy nhiên, Python có thư viện luồng

GIL không ngăn luồng. Tất cả những gì GIL làm là đảm bảo mỗi lần chỉ có một luồng đang thực thi mã Python; . Tuy nhiên, nếu bạn kết hợp các phần mở rộng C và I/O (chẳng hạn như các hoạt động PIL hoặc numpy), bất kỳ mã C nào cũng có thể chạy song song với một luồng Python đang hoạt động

Mô-đun luồng

Chúng tôi vẫn có thể thực hiện đa luồng bằng mô-đun luồng. Nhiều luồng trong một quy trình chia sẻ cùng một không gian dữ liệu với luồng chính và do đó có thể chia sẻ thông tin hoặc giao tiếp với nhau dễ dàng hơn nếu chúng là các quy trình riêng biệt

Mô-đun luồng mới hơn có trong Python 2. 4 cung cấp hỗ trợ cấp cao, mạnh mẽ hơn cho các luồng so với mô-đun luồng đã thảo luận trong phần trước

Mô-đun luồng hiển thị tất cả các phương thức của mô-đun luồng và cung cấp một số phương thức bổ sung -

  • xâu chuỗi. activeCount() - Trả về số đối tượng luồng đang hoạt động

  • xâu chuỗi. currentThread() − Trả về số lượng đối tượng luồng trong điều khiển luồng của người gọi

  • xâu chuỗi. enumerate() - Trả về danh sách tất cả các đối tượng luồng hiện đang hoạt động

Mô-đun luồng có lớp Thread thực hiện luồng. Các phương thức được cung cấp bởi lớp Thread như sau -

  • run() - Phương thức run() là điểm bắt đầu cho một luồng

  • start() − Phương thức start() bắt đầu một luồng bằng cách gọi phương thức run

  • tham gia ([thời gian]) - Tham gia () chờ các luồng kết thúc

  • isAlive() − Phương thức isAlive() kiểm tra xem một luồng có còn đang thực thi hay không

  • getName() − Phương thức getName() trả về tên của một luồng

  • setName() − Phương thức setName() đặt tên của một luồng

Ví dụ

Mô-đun luồng được cung cấp cùng với Python bao gồm một cơ chế khóa dễ thực hiện cho phép bạn đồng bộ hóa các luồng. Một khóa mới được tạo bằng cách gọi phương thức Lock(), trả về khóa mới

Phương thức thu được (chặn) của đối tượng khóa mới được sử dụng để buộc các luồng chạy đồng bộ. Tham số chặn tùy chọn cho phép bạn kiểm soát xem chuỗi có chờ để lấy khóa hay không

Nếu chặn được đặt thành 0, luồng sẽ trả về ngay lập tức với giá trị 0 nếu không lấy được khóa và bằng 1 nếu lấy được khóa. Nếu chặn được đặt thành 1, luồng sẽ chặn và đợi khóa được giải phóng

Phương thức release() của đối tượng khóa mới được sử dụng để giải phóng khóa khi không còn cần thiết

Python có thực sự đa luồng không?

Python không hỗ trợ đa luồng vì Python trên trình thông dịch Cpython không hỗ trợ thực thi đa lõi thực sự thông qua đa luồng. Tuy nhiên, Python không có thư viện luồng. GIL không ngăn luồng.

Đa luồng Python có nhanh không?

Đây là lý do tại sao Python đa luồng có thể giúp tăng tốc độ đáng kể . Bộ xử lý có thể chuyển đổi giữa các luồng bất cứ khi nào một trong số chúng sẵn sàng thực hiện một số công việc. Sử dụng mô-đun luồng trong Python hoặc bất kỳ ngôn ngữ được giải thích nào khác với GIL thực sự có thể dẫn đến giảm hiệu suất.

Đa luồng Python có sử dụng nhiều lõi không?

Chỉ một luồng duy nhất có thể có được khóa đó tại một thời điểm, điều đó có nghĩa là trình thông dịch cuối cùng sẽ chạy các hướng dẫn một cách an toàn. Thiết kế này làm cho luồng quản lý bộ nhớ trở nên an toàn, nhưng kết quả là nó không thể sử dụng nhiều lõi CPU.