Netty解析十六:Netty服务端启动流程
之前都在解析各个类的功能缺乏对Netty整体流程的了解,本篇将Netty服务端的启动流程画一下,将之前学习的内容连接起来。
在解析ServerBootstrap类的时候发现无法和之前解析的类整合起来,仔细分析发现少了NioEventLoop类的解析。NioEventLoop代表一个线程,而这个线程到底怎么运作影响了我们对于Netty理解。
ChannelHandlerContext是ChannelHandler的上下文,关联了Channel、ChannelHandler和ChannelPipeline。
ChannelHandler负责处理I/O事件或者拦截I/O操作,并且通过ChannelPipeline转发到下一个处理程序。
ChannelHandler中没有提供什么方法,要是实现只能选择ChannelInboundHandler和ChannelOutboundHandler去处理inbound和outbound操作。
在解析channel时发现channel内部实现非常依赖于ChannelPipeline,在每个事件节点都会调用ChannelPipeline的方法。
在Netty里,Channel是通讯的载体,而ChannelHandler负责Channel中的逻辑处理。
那么ChannelPipeline是什么呢?我觉得可以理解为ChannelHandler的容器:一个Channel包含一个ChannelPipeline,所有ChannelHandler都会注册到ChannelPipeline中,并按顺序组织起来。
在Netty里,Channel是通讯的载体,而ChannelHandler负责Channel中的逻辑处理。Channel是理解和使用Netty的核心,所以在正式解析流程前先将Channel做一个详细的拆解。
volatile不就是可见性和禁止重排序嘛有什么难的,结果我听到了volatile能够使long/double的读写变成原子读写,这我就懵了。long/double是64位的对于32位处理器需要两次完成,这就造成32位jvm上long/double读写没有原子性,但是volatile作用不就是禁止重排序和保证可见性怎么会有原子性的能力呢?