举一个例子,模拟一个tcp服务器处理30个客户socket。假设你是一个老师,让30个学生解答一道题目,然后检查学生做的是否正确,你有下面几个选择:
这种就是IO复用模型,Linux下的select、poll和epoll就是干这个的。将用户socket对应的fd注册进epoll,然后epoll帮你监听哪些socket上有消息到达,这样就避免了大量的无用操作。此时的socket应该采用非阻塞模式。(例子出自知乎)
存储: 列表 时间复杂度: O(n)
无差别轮询,SOCKET 越多,时间越长
存储: 链表(个数无限制) 时间复杂度: O(n)
无差别轮询,SOCKET 越多,时间越长
存储: 链表(个数无限制) 时间复杂度: O(1)
监听SOKET 事件放置到处理队列,无需轮询