Netty相关的要点
一个EventLoopGroup包含一个或者多个EventLoop;
一个EventLoop在它的生命周期内只和一个Thread绑定;
所有由EventLoop处理的IO事件都将在它专有Thread上被处理;
一个Channel在它的生命周期内只注册于一个EventLoop;
一个EventLoop可能会被分配给一个或多个Channel;
在以上的设计中,一个给定Channel的IO操作都是由相同的Thread执行的,实际上消除了对于同步的需要。
每一个新创建的Channel都将会被分配一个新的ChannelPipline。这项关联是永久性的;
Channel既不能附加另外一个ChannelPipline,也不能分离其当前的。
尽可能地重用EventLoop,以减少线程创建的开销。
Netty的Channel实现是线程安全的,因此可以存储一个到Channel的引用,并且每当需要向远程节点写数据时,都可以使用他,即使当时多线程都在使用它。
ByteBuf类是Netty的数据容器,所有的网络通信都涉及字节序列的移动。
ByteBuf维护两个不同的索引,一个用于读取readerIndex,一个用于写入writerIndex。
从ByteBuf读取时,readerIndex会被递增已经读取的字节数。写入ByteBuf时,writerIndex也会被递增。
当readerIndex和writerIndex的值相同时,表示可读的数据已经读完。
以read和write开头的方法,将会推进对应的索引位置,get set开头的方法不会。