Liệu luồng trăn có phơi bày các vấn đề về khả năng hiển thị bộ nhớ và câu lệnh sắp xếp lại như Java không? Vì tôi không thể tìm thấy bất kỳ tham chiếu đến một "Mô hình bộ nhớ Python" hoặc bất cứ điều gì như thế, mặc dù thực tế rằng rất nhiều người đang viết mã Python đa luồng, tôi đoán rằng những gotchas không tồn tại ở đây. Ví dụ: không có dễ bay hơi từ khóa. Nhưng nó dường như không được tuyên bố rõ ràng ở bất cứ nơi nào, ví dụ, một sự thay đổi trong một biến trong một chuỗi là ngay lập tức hiển thị cho tất cả các chủ đề khác.python luồng: mô hình bộ nhớ và khả năng hiển thị
Có lẽ công cụ này là tất cả đều rất rõ ràng đối với các lập trình viên Python, nhưng như một lập trình viên Java sợ hãi, tôi cần thêm một chút yên tâm :)
Ngay cả trong CPython, truy cập từ điển không phải là nguyên tử trong mọi trường hợp. Nếu hàm băm/so sánh của các khóa được viết bằng Python, GIL sẽ tạm thời được giải phóng giữa các opcodes khi các hàm đó đang thực thi. (Bạn có thể đã biết điều này, nhưng tôi cho rằng nó đáng giá cho những độc giả khác) –
Cảm ơn bạn! Tôi đã dành cả buổi sáng để học về GIL. Rõ ràng (C) Python lập trình sẽ liên quan đến một cách khác nhau để xem xét các chủ đề hơn tôi đang sử dụng để. @Daniel Stutzbach: Tôi mới sử dụng Python và có thể đã bỏ qua thực tế đó. Cảm ơn bạn. – philo
@philo, tóm tắt tình huống đa nhiệm cho CPython: các chủ đề sẽ giúp bạn chỉ khi bạn có I/O chờ đợi (bạn có thể ủy quyền cho một luồng) hoặc các hoạt động nặng được thực hiện trong phần mở rộng Python an toàn (chẳng hạn như 'numpy '). Nếu mục đích của bạn là sử dụng nhiều lõi cho các hoạt động liên kết CPU, được mã hóa bằng Python, hãy sử dụng 'multiprocessing' thay vì' threading'. –