Có một số quy tắc đơn giản khi sử dụng poll
so với epoll
trong môi trường có độ trễ thấp không? epoll
phải có chi phí cao hơn nếu chỉ có một vài bộ mô tả tệp được giám sát. Xin vui lòng, cung cấp cho một số cái nhìn sâu sắc, câu trả lời "kiểm tra xem nó cho mình" đặt ở nơi khác.thăm dò ý kiến so với thông tin chi tiết về epoll
Trả lời
Luôn luôn sử dụng poll
trừ khi tất cả những điều sau đây được thỏa mãn:
- Bạn có thể chắc chắn rằng bạn đang ở trên một hệ thống (Linux) mà có
epoll
hoặc bạn cung cấp một dự phòng cho hệ thống mà không làm. - Bạn có số lớn số lượng mô tả tệp hoạt động (ít nhất 1000-10000).
- Bộ mô tả tệp bạn đang làm việc ổn định trong một khoảng thời gian dài (thêm/xóa mô tả tệp từ danh sách
epoll
chỉ tốn kém như hoạt độngpoll
vì yêu cầu nhập/rời kernelspace).
epoll(7)
tóm tắt ngắn gọn: epoll
"chia tỷ lệ thành số lượng lớn mô tả tệp đã xem." Tuy nhiên, poll
là giao diện chuẩn POSIX, vì vậy hãy sử dụng giao diện đó khi cần có tính di động.
Có, nó có tỷ lệ, nhưng nếu số lượng fds nhỏ, 'poll' sẽ nhanh hơn. – Cartesius00
@James: Tôi thực sự muốn xem một số điểm chuẩn về điều này. Từ kinh nghiệm cá nhân tôi sẽ nói rằng khi bạn làm điều gì đó như một phản ứng về sự kiện, không có nhiều khác biệt. Cho rằng bạn phải duy trì vectơ thăm dò ý kiến, tôi thậm chí sẽ đoán rằng epoll là nhanh hơn. Sự khác biệt quan trọng là, như đã nêu trong câu trả lời này, cuộc thăm dò đó là POSIX và do đó di động hơn. epoll cũng là lợi thế của việc cung cấp thêm một vài tính năng nữa. – PlasmaHH
Trước hết, poll(2)
chỉ được kích hoạt cấp, nhưng epoll(4)
có thể được sử dụng làm giao diện cạnh hoặc được kích hoạt cấp.
Độ phức tạp: poll
độ phức tạp về số lượng bộ mô tả đã xem (fds) là O (n) khi quét tất cả các fds mỗi khi sự kiện 'sẵn sàng' xảy ra, epoll
về cơ bản là O (1) thực hiện quét tuyến tính trên tất cả các bộ mô tả đã xem.
Về mặt tính di động - vì epoll
là đặc thù của Linux, tôi khuyên bạn nên kiểm tra các thư viện libev và libevent. Ngoài ra, hãy xem bài viết tuyệt vời của Dan Kegel: "The C10K problem".
Tôi tin rằng điểm về epoll và ký hiệu O lớn là * không phải về nội bộ của một trong hai hàm *, do đó, không chính xác khi nói rằng "cuộc thăm dò sẽ quét tất cả các mô tả trong khi epoll không". * Cả hai đều có khả năng kích hoạt trên một sự kiện *. Tuy nhiên, với bình chọn, người dùng sau đó không có lựa chọn nào khác ngoài việc lặp lại toàn bộ danh sách được gửi để tìm các sự kiện, trong khi với epoll bạn nhận được một danh sách trả về chỉ chứa các sự kiện thực tế. Điều này có nghĩa là nếu máy chủ rất bận, không có lợi thế nào cho việc thu thập dữ liệu. Tuy nhiên, nếu bạn duy trì số lượng mô tả rất lớn trong một thời gian dài ... – delicateLatticeworkFever
... và hầu hết trong số đó không hoạt động, epoll sẽ có lợi thế nếu bạn có các sự kiện rất nhanh chỉ liên quan đến một vài kết nối . Tức là, O (bất cứ điều gì) là về những gì * có thể * cho việc thực hiện người dùng, không phải là hành vi thực tế của cuộc thăm dò ý kiến / epoll. – delicateLatticeworkFever
- 1. Tần suất bỏ phiếu AJAX - Để thăm dò ý kiến lâu dài hoặc không thăm dò ý kiến lâu dài?
- 2. Các lò phản ứng chọn lọc/thăm dò so với epoll trong Twisted
- 3. Thăm dò ý kiến lâu dài ở Yesod
- 4. TreeSet của Scala so với TreeSet của Java - cuộc thăm dò ý kiến?
- 5. Lược đồ Cơ sở Dữ liệu Thăm dò ý kiến
- 6. Có plugin thăm dò ý kiến jQuery không?
- 7. Thăm dò ý kiến các thông điệp/cập nhật thời gian thực
- 8. Thăm dò ý kiến lâu dài - Sự cố với Internet Explorer 8
- 9. Thăm dò ý kiến () làm gì với thời gian chờ là 0?
- 10. Django, cuộc thăm dò ý kiến dài của Ajax, Postgresql: giao dịch nhàn rỗi
- 11. Cách chính xác cho máy chủ thăm dò ý kiến ở chế độ nền
- 12. JavaScript - lấy thông tin chi tiết về trình duyệt
- 13. Chức năng thăm dò ý kiến hoạt động như thế nào trong c?
- 14. Nguồn cấp dữ liệu nhóm thiếu phiếu thăm dò ý kiến
- 15. Có buildbot thăm dò ý kiến một kho git cho các cam kết mới không?
- 16. Django có cách mở một kết nối thăm dò ý kiến HTTP dài không?
- 17. thăm dò ý kiến (2) không trống hàng đợi sự kiện
- 18. Lợi ích của việc sử dụng iframe để thăm dò ý kiến lâu dài là gì?
- 19. Tạo Thăm dò ý kiến / bình chọn/khảo sát độc đáo trong php
- 20. thực hiện thăm dò ý kiến trên linux vs poll thực hiện trên solaris
- 21. Chi tiết của thông báo APPCRASH có ý nghĩa gì?
- 22. Tôi nên thăm dò ý kiến số lượng lớn các tệp để thay đổi như thế nào?
- 23. Câu hỏi về thăm dò nhạy cảm cục bộ đa đầu dò
- 24. Eclipse không cung cấp thông tin chi tiết về tìm kiếm tập tin
- 25. Tương đương với lựa chọn hoặc thăm dò trong bash
- 26. Mô hình Cuộc thăm dò Django
- 27. Làm cách nào để thăm dò ý kiến một webservice ở khoảng thời gian hữu hạn từ android?
- 28. Cuộc thăm dò ý kiến của PHP, mà không cần truy cập cơ sở dữ liệu quá mức
- 29. Dịch vụ REST của cuộc thăm dò với Node.js
- 30. Làm thế nào để lặp select() để thăm dò ý kiến cho vô cùng tận dữ liệu
Giai thoại cá nhân: kết quả của tôi thử nghiệm epoll so với bình chọn trong một quy trình đơn (không có chủ đề, không có nhánh) http không đồng bộ (tức là, thời gian kết nối ngắn, <1000 đồng thời, cho ~ 10000 yêu cầu/giây) sự khác biệt giữa hai là không đáng kể. Xem nhận xét của tôi cho câu trả lời của plaes cho lý do tại sao. – delicateLatticeworkFever