Select/Poll/Epoll

Select是Windows里面用的一个多路复用器Selector的机制,

Poll和Epoll是Linux里面用的多路复用器Selector的机制。

Epoll是Linux 2.6版本以上用的,Poll是2.6版本以下用的。

Epoll的并发处理效率比Select和Poll高很多,是因为:

1)Select/Poll每次调用的时候,都需要把fd集合从用户态拷贝到内核态,由内核态进行遍历,来查找哪些FD已经就绪了,如果FD就绪了,那就可以执行FD对应线程或socket连接的操作;

2)Select和poll唯一的区别就是SELECT的FD集合只有1024大小的数组,而POLL的FD集合不限定数据元素的个数;

3)EPOLL则是直接在内核态维护FD集合,一旦有socket连接对应的FD,就从用户态度放到内核态,然后FD集合在用户态与内核态之间共享;此外,内核态中的FD集合不需要遍历扫描,而且通过事件触发机制,一旦FD就绪,就自动通知socket连接进行操作。

你可能感兴趣的:(Select/Poll/Epoll)