select、poll和epoll

1、select的描述符大于FD_SETSIZE(1024)时会引起内存越界,poll和epoll不会,虽然连接数有上限,但是很大,1G内存的机器上可以打开10万左右的连接,2G内存的机器可以打开20万左右的连接

2、epollLinux所特有,而select则应该是POSIX所规定,一般操作系统均有实现,所以select支持的系统更多,可移植性更强。

3、select有支持处理信号阻塞和更高时间分辨率(纳秒)的pselect

4、多线程中使用select和poll CPU使用率过高,因为select遍历检测0-maxfd中的所有套接字,poll也是线性遍历的方式而epoll只检测设置的fd。

select适用于少量fd的情况

5、poll本质上和select没有区别,但是它没有最大连接数的限制,原因是它是基于链表来存储的

5、select和poll需要将消息从内核传递到用户空间,都需要内存拷贝,而epoll利用mmap()文件映射内存加速与内核空间的消息传递;即epoll使用mmap减少复制开销。

posted @ 2017-01-31 13:55  luizp  阅读(155)  评论(0编辑  收藏  举报