Unix 网络编程 select 与 epool 函数的区别
2014-12-01 20:16
218 查看
epool与select的区别:
select在一个进程中打开的最大fd是有限制的,由FD_SETSIZE设置,默认值是2048。不过 epoll则没有这个限制,它所支持的fd上限是最大可以打开文件的数目,这个数字一般远大于2048,一般来说内存越大,fd上限越大,1G内存都能达到大约10w左右。
select的轮询机制是系统会去查找每个fd是否数据已准备好,当fd很多的时候,效率当然就直线下降了,epoll采用基于事件的通知方式,一旦某个fd数据就绪时,内核会采用类似callback的回调机制,迅速激活这个文件描述符,而不需要不断的去轮询查找就绪的描述符,这就是epool高效最本质的原因。
无论是select还是epoll都需要内核把FD消息通知给用户空间,如何避免不必要的内存拷贝就很重要,在这点上,epoll是通过内核于用户空间mmap同一块内存实现的,而select则做了不必要的拷贝
select在一个进程中打开的最大fd是有限制的,由FD_SETSIZE设置,默认值是2048。不过 epoll则没有这个限制,它所支持的fd上限是最大可以打开文件的数目,这个数字一般远大于2048,一般来说内存越大,fd上限越大,1G内存都能达到大约10w左右。
select的轮询机制是系统会去查找每个fd是否数据已准备好,当fd很多的时候,效率当然就直线下降了,epoll采用基于事件的通知方式,一旦某个fd数据就绪时,内核会采用类似callback的回调机制,迅速激活这个文件描述符,而不需要不断的去轮询查找就绪的描述符,这就是epool高效最本质的原因。
无论是select还是epoll都需要内核把FD消息通知给用户空间,如何避免不必要的内存拷贝就很重要,在这点上,epoll是通过内核于用户空间mmap同一块内存实现的,而select则做了不必要的拷贝
相关文章推荐
- Linux网络编程之socket:epoll系列函数简介,与select,poll函数的区别
- linux网络编程之socket(十三):epoll 系列函数简介、与select、poll 的区别
- Unix 网络编程学习笔记--第6章 I/O 复用: select 和poll 函数
- 【Unix 网络编程】服务器网络编程模型——I/O复用:select 函数
- UNIX 网络编程知识,函数积累
- linux网络编程:select()函数以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET(转)
- unix 网络编程 select 讲解
- UNIX环境高级编程——select和epoll的区别
- 利用Unix系统函数进行网络编程(一)
- linux网络编程--shut_down和close()函数的区别
- unix环境高级编程(阅读笔记)------signal函数与sigaction的区别
- Unix 网络编程 函数
- udp 编码的connect 函数 ——unix 网络编程 第8章
- Unix高级编程:库函数与系统调用函数区别、文件锁、进程基础
- 唯快不破:linux网络编程--shut_down和close()函数的区别
- Linux网络编程--select,poll和epoll的区别
- linux网络编程之socket(十):shutdown 与 close 函数 的区别
- unix 网络编程常用函数
- linux网络编程之socket(十):shutdown 与 close 函数 的区别
- 网络编程(3)学习多路复用(I/O)函数select