Như một số người khác đã đề xuất ("táo và cam"), tôi thấy hai kỹ thuật này là trực giao. Giả thiết cơ bản ở đây dường như là người ta sẽ chọn một hoặc cái khác: chúng ta sẽ sử dụng tài nguyên khóa và chia sẻ hoặc chúng ta sẽ sử dụng thông điệp đi qua. .
Giống như, nói, một bộ đánh giá metacircular, nó không rõ ràng đó là những nguyên thủy thực sự ở đây. Ví dụ: để triển khai gửi thư, có thể bạn sẽ cần số nguyên tử CAS và khả năng hiển thị bộ nhớ cụ thể hoặc có thể một số trạng thái khóa và chia sẻ. Người ta có thể thực hiện các hoạt động nguyên tử về khóa, hoặc người ta có thể thực hiện các khóa về các hoạt động nguyên tử (như Java thực hiện trong các loại java.util.concurrent.locks
của nó).
Tương tự như vậy, mặc dù phải thừa nhận là một đoạn, người ta có thể triển khai khóa bằng thông điệp. Yêu cầu cái nào hoạt động tốt hơn không có ý nghĩa gì nói chung, bởi vì đó thực sự là một câu hỏi mà chúng được xây dựng theo đó. Nhiều khả năng, cái ở mức thấp hơn có thể được điều khiển tốt hơn bởi một lập trình viên có khả năng hơn là được xây dựng trên đầu trang — như trường hợp với hộp số tay truyền cho đến gần đây (cũng có một cuộc tranh luận ở đó).
Thông thường, cách tiếp cận thông điệp được khen ngợi không phải cho hiệu suất tốt hơn, mà là vì an toàn và tiện lợi, và thường được bán bằng cách từ chối kiểm soát lập trình khóa và tài nguyên được chia sẻ. Kết quả là, nó đặt cược chống lại khả năng lập trình; nếu các lập trình viên không thể có được một khóa, anh ta không thể làm điều đó kém và làm chậm chương trình xuống. Giống như một cuộc tranh luận liên quan đến quản lý bộ nhớ thủ công và thu gom rác thải, một số sẽ được coi là "trình điều khiển tốt", làm cho hầu hết các điều khiển bằng tay; những người khác — đặc biệt là những người thực hiện và thúc đẩy sử dụng một người thu gom rác — sẽ tuyên bố rằng trong tổng hợp, người thu thập có thể làm một công việc tốt hơn "trình điều khiển không tốt" có thể với quản lý thủ công.
Không có câu trả lời tuyệt đối. Sự khác biệt ở đây sẽ nằm ở mức độ kỹ năng của các lập trình viên, chứ không phải với các công cụ mà họ có thể sử dụng.
Có thể bạn chỉ cần mở rộng câu hỏi của mình? Chính xác bạn đang hỏi về điều gì? Một số ví dụ về trường hợp? Bởi vì câu trả lời 'thực' cho câu hỏi của bạn - giống như viết một cuốn sách :) - thực sự dài –
Đây có phải là sự so sánh công bằng không? Không phải táo và cam này sao? –
là câu hỏi này về việc so sánh luồng truyền thống và phương pháp tiếp cận giống như [SEDA] (http://en.wikipedia.org/wiki/Staged_event-driven_architecture)? nếu có, thì sự hiểu biết của tôi là việc chặn luồng liên quan đến chi phí hiệu năng đáng kể (hàng rào bộ nhớ và như vậy). Bạn có thể xem thảo luận: [Làm thế nào để cải thiện đáng kể hiệu suất của java?] (Http://programmers.stackexchange.com/questions/96994/how-to-significantly-improve-java-performance) – gnat