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)
原文地址:https://www.cnblogs.com/alipayhutu/p/2779953.html