- 支持一个进程打开的socket描述符(fd)不受限制(仅受限于操作系统的最大文件句柄数)
select最大的缺陷单个进程锁打开的fd是由一定限制的,由FD_SETSIZE设置(默认1024),想要修改需要重新编译内核。Java由于没有共享内存,需要通过socket或其他方式进行数据同步,有额外性能开销。epoll没有这个限制,可支持的fd位操作系统最大文件句柄数,1G内存大约10万个句柄。 - I/O效率不会随着fd数目增加而线性下降
select每次都会现行扫描全部集合,在网络延时或链路空闲时,效率会比较低。epoll首先会向每个fd上注册事件,当fd状态就绪时,会调用callback,不需要遍历所有的fd。只有在所有的socket都处于活跃状态,epoll才会没有优势,甚至效率低于select - 使用mmap加速内核与用户空间的消息传递
用户进程是无法访问到是无法访问到kernel space的,传统的文件读取都是要从kernel buffer执行copy到user space,而mmap做了kernel buffer到user space的地址映射,避免了一次copy,而且mmap在读取时仅在kernel buffer中不存在时,再去读取磁盘中的数据。
epoll的特点
最新推荐文章于 2023-08-07 00:02:53 发布