select/poll和epoll的区别

select、poll、epoll等系统调用都是IO多路复用的操作系统层面的实现机制。IO多路复用是一种同步非阻塞的网络IO模型,“复用”是指通过对一个线程的复用使其能够同时监视多个文件描述符,若某个文件描述符就绪则通知相关线程进行相应的读写操作。

总的来说,select和poll的实现相似,但select/poll的一些固有缺陷导致它的应用受到了很大的限制,为了克服select/poll的缺点,epoll作了很多重大改进:

  • epoll支持一个进程打开的socket描述符(FD)不受限制

select/poll最大的缺陷是单个线程所打开的的FD是有一定限制的,默认是1024。epoll所支持的FD上限是操作系统的最大文件句柄数,例如,1G内存的机器上大约是10万个句柄左右。

  • IO效率不会随着FD数目的增加而线性下降

select/poll的另一个致命缺陷是每次调用都会线性扫描全部的FD集合,导致效率呈现线性下降。但大多数时刻只有少部分的FD是活跃的,因此会造成性能损失。二poll实现了一个伪AIO,它只会针对活跃的FD进行操作,通过每个FD上面的callback函数实现。


每日学习笔记,写于2020-05-17 星期日

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。