零拷贝 hard driver -- 内核缓冲区 -- protocol engine 只有DMA拷贝 避免了cpu拷贝
这里其实有一次 cpu拷贝 kernel buffer -- socket buffer 但是拷贝的信息很少可以忽略;
传统阻塞IO模型
每个连接都需要独立的线程完成数据的输入,业务处理,数据返回;
缺点:当并发很大时,就会创建大量线程,增大服务端压力;
reactor模式
1. 基于IO复用模型,多个连接共用一个阻塞对象
2. 基于线程池复用线程资源,一个线程可以处理多个连接的业务
核心组件 reactor handler
根据reactor数量和处理线程的数量,有三种实现:
1. 单reactor单线程
2. 单reactor多线程 高并发下,会出现性能瓶颈
3. 主从reactor多线程 reactor主线程可以对应多个reactor子线程
netty模型:
读取数据后任务处理
netty中重要概念
1. 一个channel包含了一个ChannelPipeline,而ChannelPipeline中又维护了一个由ChannelHandlerContext组成的双向链表,并且每个ChannelHandlerContext中又关联着一个ChannelHandler;
2. BossEventLoopGroup通常是一个单线程的EventLoop,EventLoop维护着一个注册了ServerSocketChannel的Selector实例,BossEventLoop不断地轮训Selector,将连接事件分离出来,通常是OP_ACCEPT事件,然后将接收到的SocketChannel交给WorkerEventLoopGroup,WorkerEventLoopGroup会由next选择其中一个EventLoop来将这个SocketChannel注册到其维护的Selector,并对其后续的IO事件进行处理。