Cũng tùy thuộc vào cách bạn xác định đồng thời.
Trong phần mềm phía máy chủ, đồng thời và song song thường được coi là các khái niệm khác nhau. Trong một máy chủ, hỗ trợ I/O đồng thời có nghĩa là máy chủ có thể phục vụ một số máy khách bằng cách thực hiện một số luồng tương ứng với các máy khách đó chỉ với một đơn vị tính toán. Trong bối cảnh này, song song sẽ có nghĩa là máy chủ có thể thực hiện một số điều cùng một lúc (với nhiều đơn vị tính toán), khác nhau.
Ví dụ: một bartender có thể chăm sóc một số khách hàng trong khi ông chỉ có thể chuẩn bị một loại đồ uống tại một thời điểm. Vì vậy, ông có thể cung cấp đồng thời mà không có song song.
Câu hỏi này đã được tranh luận ở đây: Concurrency vs Parallelism - What is the difference?
Xem thêm this presentation từ Rob Pike.
Một chương trình đơn luồng chắc chắn có thể cung cấp đồng thời ở cấp I/O bằng cách sử dụng cơ chế ghép kênh I/O (de) và vòng lặp sự kiện (đó là những gì Redis thực hiện).
Tính song song có chi phí: với nhiều ổ cắm/nhiều lõi bạn có thể tìm thấy trên phần cứng hiện đại, đồng bộ hóa giữa các chuỗi cực kỳ tốn kém. Mặt khác, các nút cổ chai của một công cụ lưu trữ hiệu quả như Redis là rất thường xuyên mạng, cũng trước khi CPU. Các vòng lặp sự kiện bị cô lập (không yêu cầu đồng bộ hóa) do đó được xem là một thiết kế tốt để xây dựng các máy chủ hiệu quả, có khả năng mở rộng.
Thực tế là các phép toán Redis là nguyên tử đơn giản là kết quả của vòng lặp sự kiện đơn luồng.Điểm thú vị là nguyên tử được cung cấp mà không mất thêm chi phí (nó không yêu cầu đồng bộ hóa). Nó có thể được khai thác bởi người dùng để thực hiện khóa lạc quan và các mẫu khác mà không phải trả tiền cho chi phí đồng bộ hóa.
Nguồn
2012-05-08 08:51:51
Tương tự bartender đẹp :) –
Điều đó đã giúp ích rất nhiều, cảm ơn rất nhiều! –
Đơn giản và rõ ràng, cảm ơn. – harsha