select缺点
select() 检测数量有限制,最大值通常为 1024(bit),每一个比特位对应一个监听的文件描述符fd_set被内核修改后,不可以重用,每次都需要重置每次调用select,都需要把fd集合从用户态拷贝到内核态,这个开销在fd很多时会很大每次调用select都需要在内核遍历传递进来的所有fd,这个开销在fd很多时也很大(((时间复杂度是O(n))))
poll缺点
select第三四条缺点没有解决
每次调用select,都需要把**fd集合从用户态拷贝到内核态,这个开销在fd很多时会很大每次调用select都需要在内核遍历传递进来的所有fd,这个开销在fd很多时也很大(((时间复杂度是O(n))))
epoll优点
epoll底层数据结构很好
红黑树增删改综合效率高
就绪的描述符的链表。当有的连接就绪的时候,内核会把就绪的连接放到 rdllist 链表里。这样应用进程只需要判断链表就能找出就绪进程,而不用去遍历整棵树。
THE END
暂无评论内容