Tôi đang thiết kế vòng lặp sự kiện cho ổ cắm không đồng bộ IO bằng cách sử dụng epoll/devpoll/kqueue/poll/select (bao gồm cả cửa sổ chọn).Thiết kế vòng lặp sự kiện không đồng bộ và các vấn đề
tôi có hai lựa chọn thực hiện, IO hoạt động:
chế độNon-blocking, cuộc thăm dò trên EAGAIN
- Set ổ cắm sang chế độ non-blocking.
- Đọc/ghi vào ổ cắm.
- Nếu hoạt động thành công, hãy đăng thông báo hoàn thành lên vòng lặp sự kiện.
- Nếu tôi nhận được EAGAIN, hãy thêm ổ cắm vào "danh sách lựa chọn" và ổ cắm thăm dò ý kiến.
chế độ Polling: thăm dò và sau đó thực hiện
- Add ổ cắm để chọn danh sách và thăm dò ý kiến nó.
- Chờ thông báo rằng nó có thể đọc ghi
- đọc/viết
- bài viết hoàn thành thông báo để lặp sự kiện của sucseeds
Đối với tôi nó trông giống như đầu tiên sẽ yêu cầu ít system call khi sử dụng ở chế độ bình thường , đặc biệt là để ghi vào ổ cắm (bộ đệm là khá lớn). Ngoài ra có vẻ như nó sẽ có thể làm giảm chi phí trên số "chọn" thực thi, đặc biệt là nó là tốt đẹp khi bạn không có cái gì đó quy mô tốt như epoll/devpoll/kqueue.
Câu hỏi:
- Có bất kỳ ưu điểm của cách tiếp cận thứ hai?
- Có bất kỳ vấn đề về tính di động nào với các hoạt động không chặn trên bộ mô tả ổ cắm/tệp trên nhiều hệ điều hành: Linux, FreeBSD, Solaris, MacOSX, Windows.
Ghi chú: Xin đừng đề nghị sử dụng triển khai sự kiện vòng/ổ cắm-api
Tôi không thấy lý do nào khiến bạn không thể đợi để cấp phát bộ nhớ til cần thiết bằng cách sử dụng cách tiếp cận đầu tiên. Tui bỏ lỡ điều gì vậy? – Ioan
Tôi cho là vậy nhưng trong thực tế nó không được thực hiện theo cách đó. Trong trường hợp đầu tiên bạn cần bộ đệm có sẵn từ bước 2-4, trong trường hợp thứ hai bạn cần nó chỉ trong bước 3. – karunski