2010-10-28 10 views
54

Tôi đang thiết kế một máy chủ mới cần hỗ trợ hàng ngàn kết nối UDP (ở đâu đó khoảng 100.000 phiên). Bất kỳ đầu vào hoặc đề xuất nào để sử dụng?select vs poll vs epoll

+1

bạn đang sử dụng hệ điều hành nào? os khác nhau có khác nhau cụ thể. –

+0

Linux Redhat phiên bản doanh nghiệp 5 – ravi

+1

@ravi: Bạn cũng nên kiểm tra các khung công tác dựa trên sự kiện (không đồng bộ) như Twisted, nơi bạn có thể viết máy chủ của mình và kiểm tra nó bằng nhiều phương pháp bỏ phiếu khác nhau: [TwistedMatrix.com: Chọn lò phản ứng] (http : //twistedmatrix.com/documents/current/core/howto/choosing-reactor.html) –

Trả lời

17

Linux: epoll FreeBSD: kqueue Windows: ??

Có các thư viện trình bao bọc, chẳng hạn như libevent và libev, có thể trừu tượng hóa điều này cho bạn.

+4

+ 1 trên libev, tuyệt vời của nó! – dcolish

+13

Windows: Cổng hoàn thành IO – kibab

+6

Và nhân tiện. IOCP: Windows NT 3.5, 1994; kqueue: BSD 4.1, 2000; epoll: linux kernel 2.5.44, 2002. – Soonts

37

Câu trả lời là epoll nếu bạn đang sử dụng Linux, kqueue nếu bạn đang sử dụng FreeBSD hoặc Mac OS X và các cổng hoàn thành i/o nếu bạn đang sử dụng Windows.

Một số điều bổ sung mà bạn sẽ (gần như chắc chắn) muốn nghiên cứu là:

  • tải kỹ thuật cân bằng
  • mạng
  • kiến ​​trúc cơ sở dữ liệu
  • bảng băm Perfect Multi-ren

Ngoài ra, nó là quan trọng để ghi chú thứ tại UDP không có "kết nối" như trái ngược với TCP. Nó cũng sẽ được quan tâm tốt nhất của bạn để bắt đầu nhỏ và quy mô lớn hơn kể từ khi gỡ lỗi các giải pháp dựa trên mạng có thể được thử thách.

+5

Cảm ơn bạn đã phản hồi. Tôi hiểu không có cái gọi là kết nối UDP như nó là một truyền thông hướng kết nối. Các ứng dụng tôi đã có trong tâm trí là phiên dựa, vì vậy thay vì phiên tôi đã đề cập nó như là kết nối. Lỗi của tôi. Ngoài ra tôi đã thử hơn 200.000 phiên dựa trên lựa chọn với ứng dụng đa luồng. Chỉ muốn tối ưu hóa. Ngoài ra iam không phải là mới để xây dựng giải pháp kiến ​​trúc có thể mở rộng. Cân bằng tải có thể không phù hợp với loại máy chủ iam đang xem. Đó chắc chắn là một mạng đa luồng. Có lẽ hầu hết sẽ sử dụng một số loại hình sản xuất/người tiêu dùng. – ravi

40

Tác giả của CURL đã viết một bài viết tuyệt vời trên poll vs select vs event libraries.

+5

Hướng dẫn đó không giúp ích chút nào. Về cơ bản nó giả định rằng mọi người đều biết sự khác biệt chính giữa ba. – enigmaticPhysicist

+3

Vui lòng cung cấp ít nhất một bản tóm tắt và không chỉ là một liên kết trống – MikeMB

+0

@enigmaticPhysicist - Tôi đồng ý với bạn. Tôi đã tìm thấy bài viết này chi tiết hơn, hy vọng nó sẽ giúp: https://www.ulduzsoft.com/2014/01/select-poll-epoll-practical-difference-for-system-architects/ –