Vâng, nó phụ 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ố khách hàng 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ố việc cùng một lúc (với nhiều đơn vị tính toán), điều này là khác nhau.
Chẳng hạn, một nhân viên pha chế có thể chăm sóc một số khách hàng trong khi anh ta chỉ có thể chuẩn bị một đồ uống mỗi lần. Vì vậy, anh ta có thể cung cấp đồng thời mà không cần song song.
Câu hỏi này đã được tranh luận ở đây:
sự khác biệt giữa đồng thời và song song là gì?
Xem thêm phần trình bày này 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 làm).
Parallelism có một 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 luồng là cực kỳ tốn kém. Mặt khác, nút cổ chai của một công cụ lưu trữ hiệu quả như Redis rất thường là mạng, trước cả CPU. Do đó, các vòng lặp sự kiện riêng biệt (không yêu cầu đồng bộ hóa) được xem là một thiết kế tốt để xây dựng các máy chủ hiệu quả, có thể mở rộng.
Việc các hoạt động của Redis là nguyên tử chỉ đơn giản là hệ quả của vòng lặp sự kiện đơn luồng. Điểm thú vị là tính nguyên tử được cung cấp miễn phí (không yêu cầu đồng bộ hóa). Nó có thể được người dùng khai thác để thực hiện khóa tối ưu và các mẫu khác mà không phải trả tiền cho chi phí đồng bộ hóa.