Netty笔记4:Epoll
Netty笔记1:线程模型
Netty笔记2:零拷贝
Netty笔记3:NIO编程
Netty笔记4:Epoll
Netty笔记5:Netty开发实例
Netty笔记6:Netty组件
Netty笔记7:ChannelPromise通知处理
Netty笔记8:ByteBuf使用介绍
Netty笔记9:粘包半包
Netty笔记10:LengthFieldBasedFrameDecoder很简单
Netty笔记11:编解码器
Netty笔记12:模拟Web服务器
Netty笔记13:序列化
文章目录
- 前言
- Epoll是什么
前言
该篇是纯理论知识点,是对NIO
理解的一个重要知识点,不需要深入理解,只需要简单了解,所以这篇是以简单的方式进行说明,为后续的知识打一个小基础。
Epoll是什么
Epoll
是什么?
Epoll
是Linux的高性能IO多路复用机制。
之前我们提到的IO多路复用和Epoll
有何不同?
首先之前我们提到并且编程实例中使用的Selector
是程序上的,而epoll
是系统程序上的,程序是基于系统之上的,并且他们IO复用的逻辑也不同:
selector
:当网卡接收到数据后,发出中断信号给CPU,CPU便中断当前正在执行的进程,而后将数据写入到socket的缓冲区,唤醒等待队列中的进程,低效在进程遍历所有的socket确定就绪的socket。
epoll
:当网卡接收到数据后,发出中断信号给CPU,CPU便中断当前正在执行的进程,而后将数据写入到socket缓冲区,并将等待队列中的进程添加到eventpoll
的等待队列中,以及将socket
的引用添加到eventpoll
的rdlist
就绪队列中,高效在:epoll
通过控制eventpoll
里的就绪进程和rdlist
避免了socket的遍历。
下面是系统收到数据包的流程(中断信号的应用),通过中断信号通知CPU,而后CPU就停止当前正在执行的任务;
epoll
工作原理图:
这里涉及CPU调度以及epoll
执行的一个过程,工作队列就是计算机中的工作队列,在系统中存在多个进程以维持系统问题以及处理用户任务,那么当网络发来数据,也就是socket
接收到数据后,会把接收到数据的socket
添加到eventpoll
,并将rdlist
的引用指向socket
,并让等待的进程(如图中的进程A)进入就绪状态等待CPU调度,等进程执行时,就遍历rdlist
的引用列表。