Netty复习——select与epoll对比

1.支持一个进程打开的socket描述符fd不受限制(仅受限于操作系统的最大文件句柄数)。说到Linux系统最大文件句柄数,在Linux性能调优的时候,这个是比较经常调试的参数。

借鉴了其他人的文章。https://blog.51cto.com/12824426/2060594

select最大的缺陷就是单个进程所打开的fd是有一定限制的,它由fd_setsize 设置,默认值是1024.对于需要支持上万个TCP连接的大型服务器来说显然太少了。可以选择修改这个宏然后重新编译内核,

不过这会带来网络效率的下降。

2.I/O效率不会随着FD数目的增加而线性下降。

传统的select/poll就是当一个很大的socket集合,由于网络延时或者链路空闲,任一时刻只有少部分socket是活跃的,但是select/poll每次调用都会线性扫描全部的集合,导致效率呈现线性下降。epoll不存在这个问题

它只会对活跃的socket进行操作,这是因为在内核实现中epoll是根据每个fd的callback函数来实现的,只有活跃的socket才会主动去调用callback函数。

3.使用mmap加速内核与用户空间的消息传递。

无论是select,poll还是epoll都需要把内核fd消息通知给用户空间,如何避免不必要的内存赋值就很重要,epoll是通过内核和用户空间的mmap同一块内存实现的。

原文地址:https://www.cnblogs.com/ligtto2018/p/14043469.html