Ai đó có thể giải thích nếu có bất kỳ lợi thế nào để viết một đoạn mã đa luồng chạy trên một bộ xử lý đơn lẻ với một lõi đơn không? Ví dụ: một phương thức xử lý các trang tài liệu sao cho các trang này loại trừ lẫn nhau với phần mã được đề cập ở trên.Lập trình đơn và đa luồng trên một bộ xử lý lõi đơn
Thoạt nhìn, dường như không có lợi thế vì không thể thực hiện đa luồng thực sự. Tức là, hệ điều hành sẽ phải bối cảnh chuyển đổi các chủ đề anyway. Tôi tự hỏi nếu chỉ cần mã hóa một cái gì đó trong một cách đơn luồng thực sự có thể hiệu quả hơn. Rõ ràng, có rất nhiều trường hợp viết mã đa luồng có ý nghĩa, nhưng một lần nữa, câu hỏi của tôi là liệu có thực sự là một lợi thế khi làm như vậy khi ứng dụng đang chạy trên một bộ vi xử lý lõi đơn hay không.
CHỈNH SỬA: lưu ý rằng tôi không nói "ứng dụng" mà là "đoạn mã" - hãy xem ví dụ của tôi ở trên. Rõ ràng có những lợi ích khi có ứng dụng đa luồng.
Bạn có thể có chuỗi chờ tải tệp, để dữ liệu mạng đến ngay cả khi chỉ có thể sử dụng bộ xử lý tại một thời điểm. – zch
Như @ zch đã chỉ ra, các ứng dụng IO-bound có thể tận dụng lợi thế của đa luồng ngay cả trên một lõi đơn, mặc dù bạn sẽ không bao giờ tăng tốc 2X cho chúng (nếu IO trở nên quá nhiều tốc độ tăng tốc của CPU) theo luật của Amidhal).Một lý do phổ biến hơn là thiết kế các ứng dụng đa luồng, ngay cả khi bạn chỉ có 1 lõi tại thời điểm này, là để dễ dàng chuyển đổi cho nhiều lõi khi chúng trở nên khả dụng. Sẽ tốt hơn rất nhiều khi thiết kế ứng dụng ngay một lần mà không cần mã hóa các giới hạn phần cứng hiện tại, sau đó viết lại nó khi có thêm tài nguyên phần cứng. – Michael
@Michael Tôi đồng ý trong trường hợp bạn chắc chắn rằng bạn sẽ chuyển sang một hệ thống đa lõi, nhưng làm cho mã của bạn phức tạp hơn bây giờ vì một cái gì đó bạn có thể muốn làm với nó trong tương lai thường không xứng đáng. –