IOCP, Kqueue, Epoll... Quan Trọng Đến Mức Nào?
Khi thiết kế máy chủ game MMO, tôi thường nghe những lời khuyên truyền thống rằng hàm select()
rất kém hiệu quả khi xử lý hàng ngàn kết nối đồng thời. Thay vào đó, chúng ta nên dùng các công nghệ hiện đại như IOCP (trên Windows), kqueue (trên FreeBSD) hay epoll (trên Linux). Điều này hoàn toàn chính xác - select()
thực sự chậm vì mỗi lần kernel phải quét toàn bộ danh sách socket được truyền vào. Anh Chen Rong từng ví von tại Thượng Hải rằng đây là kiểu “kỹ thuật lùng sục thôn xóm”: kiểu gì cũng phải hỏi đi hỏi lại “Kẻ địch đã vào làng chưa? Kẻ địch đã vào làng chưa?”… khiến CPU luôn trong tình trạng bận rộn. Chưa kể trên Windows còn có giới hạn ngặt nghèo là chỉ xử lý được tối đa 64 socket mỗi lần!