Redis
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> Redis

Redis là một luồng, sau đó nó thực hiện I / O đồng thời như thế nào?

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áy chủ, hỗ trợ I / Os đồ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, tính song song có nghĩa là máy chủ có thể thực hiện nhiều 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.

Ví dụ, 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 loại đồ uống tại một thời điểm. 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 bài thuyết trình này của 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).

Song song có cái giá phải trả:với nhiều ổ cắm / nhiều lõi mà bạn có thể tìm thấy trên phần cứng hiện đại, việc đồng bộ hóa giữa các luồng là cực kỳ tốn kém. Mặt khác, nút thắt cổ chai của một công cụ lưu trữ hiệu quả như Redis thường là mạng, trước cả CPU. Do đó, các vòng lặp sự kiện biệt lập (không yêu cầu đồng bộ hóa) được coi 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.

Thực tế là các hoạt động Redis là nguyên tử đơ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í (nó không yêu cầu đồng bộ hóa). Người dùng có thể khai thác nó để triển khai khóa lạc quan và các mẫu khác mà không phải trả phí đồng bộ hóa.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Redis pub / sub on rails

  2. Lợi thế của việc sử dụng chương trình phụ trợ tùy chỉnh phiên Gorilla là gì?

  3. Thực thi hàng loạt lệnh bằng redis cli

  4. _http_server.js:192 ném RangeError mới (`Mã trạng thái không hợp lệ:$ {statusCode}`);

  5. nhiều khách hàng có thể truy cập đồng thời vào cùng một danh sách mà không bị chặn trong Redis không?