netty源码学习—课堂3
netty channel nio socket,呵呵,接下来说的就是它们几个。
DefaultNioSocketChannelConfig.java
主要属性:
- writebuffer的两个游标阈值:high watermark, low watermark,一般前者为后者的一半
- writeSpinCount,
- predictor, 预测channel的receive buffer大小。有adaptive和fixed两种实现。1)AdaptiveReceiveBufferSizePredictor, 根据上次读操作的具体情况来"自适应的"调节下次recive buffer大小,预估的越准,内存使用率就越高。如果上次读全部完全利用了,那么本次继续尝试加大。如果上次的连续两次读都没有用完,那么本次尝试减小。其他情况将暂时保持不变。2) FixedReceiveBufferSizePredictor, 固定大小的。
NioSocketChannel
- 各种属性:1) 标识channel状态的各种ST_OPEN, ... 2) 用于真正通信的socket 3) worker 4) localAddress, remoteAddress 5) 关于配置的config 6) 关于兴趣的 interestOpsLock 7) 关于写的writeLock, writeTask writeTaskInTaskQueue writerBuffer, inWriteNowLoop, writeSuspended, currentWriteEvent, currentWriteBuffer 8)关于读的 居然木有,咋回事
- 子类:NioAcceptedSocketChannel
- 子类:NioClientSocketChannel
NioClientSocketChannelFactory.java
- boss 大总管,仅负责connect事件
- workers 负责connect以后的全部事宜
- sink NioClientSocketPipelineSink,是downstream事件接纳池,例如bind, connect, open, write, set interest_ops等,这类事件最后都沉到该池子当中,进行处理。
AbstractServerChannel.java
- X
- 子类:NioServerSocketChannel,与NioClientSocketChannel功能对等。
- 子类:
NioServerSocketChannelFactory.java 与NioClientSocketChannelFactory.java功能对等
- boss 大总管,仅负责connect事件,可以有多个,例如针对port 44与88,可以有两个boss线程分别主管
- workers 负责connect以后的全部事宜
- sink NioServerSocketPipelineSink是downstream事件接纳池,例如bind, connect, open, write, set interest_ops等,这类事件最后都沉到该池子当中,进行处理。
NioProviderMetadata.java
- ConstraintLevel,不同的硬件生产厂商,对应不同的约束级别。
- 0 - no need to wake up to get / set interestOps (most cases)
- 1 - no need to wake up to get interestOps, but need to wake up to set.
- 2 - need to wake up to get / set interestOps (old providers)