关于Epoll的言论
-
epoll et模式的场景在于,可以通过读取一部分数据来判断全部数据是否有用, 有用就读取, 没有用处就丢弃. 也就是说,只通知一次,不烦人.
-
读取套接字的操作,就是把数据从内核拷贝到用户空间的过程.
-
为什么说 et 模式比 lt 模式效率高呢? 因为频繁事件, 造成的后果是, 不停的从用用户态和内核态之前切换, 从而导致高额的成本.
-
什么是阻塞? 就是进程无法执行,而被挂起了. 只有等待某个时间发生才会重新恢复. 所谓的阻塞IO就是指, 调用这个IO操作,导致进程停下来了.
-
为什么要设置一个非阻塞 read 呢? 因为如果因为 read 而阻塞,那么它必须一直等待这个socket 有数据可读或者满足读取数量, 才会重新执行, 那么这样就会导致 进程卡死在某一个 socket 上,而其他socket则统统无法接受数据. 这样是对其他连接不公平的. 想要改变这种情况, 我们必须修改 read 操作, 使其为非阻塞读, 也就是说, 即便没有读到数据, 或者读到足够多的数据, 也应该立刻返回, 然后让程序本身采取轮询的方式去继续执行, 而不应该阻塞.
-
边缘触发可以模拟水平触发, 比如通过不停的轮询来读取所有的数据. 而且使用et可以减少 epoll_wait的次数.
参考
[0]说透阻塞与非阻塞,极度舒适的文章
https://blog.csdn.net/qq_36573828/article/details/89149057
[1]穷举阻塞模式与非阻塞模式和 ET,LT的区别
https://blog.csdn.net/zxm342698145/article/details/80524331