Netty 系列目录(http://www.javashuo.com/article/p-hskusway-em.html)html
Channel 为 Netty 网络操做抽象类,EventLoop 主要是为 Channel 处理 I/O 操做,二者配合参与 I/O 操做。java
Unsafe 是个内部接口,聚合在 Channel 中协助进行网络读写相关的操做。git
Channel 的功能主要功能以下:github
以 NioServerSocketChannel 建立过程为例。网络
// 建立 NIO 底层的 ServerSocketChannel 对象 public NioServerSocketChannel() { this(newSocket(DEFAULT_SELECTOR_PROVIDER)); } // NioServerSocketChannel 须要注册 OP_ACCEPT 事件 public NioServerSocketChannel(ServerSocketChannel channel) { super(null, channel, SelectionKey.OP_ACCEPT); config = new NioServerSocketChannelConfig(this, javaChannel().socket()); } // 设置成非阻塞模式,并注册感兴趣的事件 protected AbstractNioChannel(Channel parent, SelectableChannel ch, int readInterestOp) { super(parent); this.ch = ch; this.readInterestOp = readInterestOp; ch.configureBlocking(false); } // 建立 channel 是建立对应的 pipeline protected AbstractChannel(Channel parent) { this.parent = parent; id = newId(); unsafe = newUnsafe(); pipeline = newChannelPipeline(); }
NioServerSocketChannel 建立过程主要干了两件事,其配置信息保存在 NioServerSocketChannelConfig 中:socket
ServerSocketChannel 建立为何要用 provider.openServerSocketChannel()?ide
private static ServerSocketChannel newSocket(SelectorProvider provider) { // ServerSocketChannel.open() 每秒建立 5000 个链接时性能会下将 1% // https://github.com/netty/netty/issues/2308 return provider.openServerSocketChannel(); }
天天用心记录一点点。内容也许不重要,但习惯很重要!oop