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