关于Epoll的言论

关于Epoll的言论

  1. epoll et模式的场景在于,可以通过读取一部分数据来判断全部数据是否有用, 有用就读取, 没有用处就丢弃. 也就是说,只通知一次,不烦人.

  2. 读取套接字的操作,就是把数据从内核拷贝到用户空间的过程.

  3. 为什么说 et 模式比 lt 模式效率高呢? 因为频繁事件, 造成的后果是, 不停的从用用户态和内核态之前切换, 从而导致高额的成本.

  4. 什么是阻塞? 就是进程无法执行,而被挂起了. 只有等待某个时间发生才会重新恢复. 所谓的阻塞IO就是指, 调用这个IO操作,导致进程停下来了.

  5. 为什么要设置一个非阻塞 read 呢? 因为如果因为 read 而阻塞,那么它必须一直等待这个socket 有数据可读或者满足读取数量, 才会重新执行, 那么这样就会导致 进程卡死在某一个 socket 上,而其他socket则统统无法接受数据. 这样是对其他连接不公平的. 想要改变这种情况, 我们必须修改 read 操作, 使其为非阻塞读, 也就是说, 即便没有读到数据, 或者读到足够多的数据, 也应该立刻返回, 然后让程序本身采取轮询的方式去继续执行, 而不应该阻塞.

  6. 边缘触发可以模拟水平触发, 比如通过不停的轮询来读取所有的数据. 而且使用et可以减少 epoll_wait的次数.

参考

[0]说透阻塞与非阻塞,极度舒适的文章
https://blog.csdn.net/qq_36573828/article/details/89149057
[1]穷举阻塞模式与非阻塞模式和 ET,LT的区别
https://blog.csdn.net/zxm342698145/article/details/80524331

上一篇:高并发网络编程之epoll详解


下一篇:epoll总结