netty 架构
高性能,事件驱动的NIO框架
netty 架构图
结构说明
- event model:可扩展的事件模型
Universal Communication API:统一的通讯API
zero-copy-capable byte buffer:零拷贝buffer,支持动态扩容
channel:socket支持http,nio,oio (AIO基于操作系统实现 )
transport service:传输层服务
- socket&diagram
- http
protocl support:应用层协议支持
netty模块组件
- bootstrap:netty服务端和客户端
- buffer:缓冲相关,对NIO Buffer做了一些优化、封装
- channel:处理客户端和服务端的连接通道
- container:连接其他容器的代码
- handler:实现协议编解码的功能
- logging/util:日志/工具类
netty的主从多线程Reactor模型
模型图
对应模型类的关系
MainReactor=NioServerBoss
SubReactor=NioWorker
NioWorker 基本方法说明:
- 类关系图:
方法说明:
- org.jboss.netty.channel.socket.nio.AbstractNioSelector#openSelector:启动NioWork/NioBoss线程
- org.jboss.netty.util.ThreadRenamingRunnable
- org.jboss.netty.channel.socket.nio.AbstractNioSelector#run
- org.jboss.netty.channel.socket.nio.NioWorker.RegisterTask :注册任务
- org.jboss.netty.channel.socket.nio.AbstractNioWorker#process :处理事件
- org.jboss.netty.channel.socket.nio.NioWorker#read 读取buffer,放到接受事件到Pipeline
NioServerBoss 说明
- 类关系图
方法说明:
org.jboss.netty.channel.socket.nio.NioServerBossPool#newBoss:
org.jboss.netty.channel.socket.nio.NioServerBoss#process:业务work处理
org.jboss.netty.channel.socket.nio.NioServerBoss#registerAcceptedChannel:装发请求为work,异步转发,轮询方式
org.jboss.netty.channel.socket.nio.AbstractNioSelector#run:核心流程
org.jboss.netty.channel.socket.nio.AbstractNioWorkerPool#init:初始化work线程
org.jboss.netty.channel.Channels#fireMessageReceived(org.jboss.netty.channel.Channel, java.lang.Object) 处理接受的事件
org.jboss.netty.channel.socket.nio.AbstractNioSelector#register:注册selector事件
处理流程:
- 标记selector的状态(wakeup状态):wakeup默认为false,事件任务放到queue,将warkup设置为true
- selector(注册)
- 处理任务队列
- 处理自己的作业(客户端)
代码说明:
总结
netty做的优化:主从多线程,有boss线程,work线程(多线程的目的充分利用cpu的核数)