随笔分类 - Netty
关于Netty的知识
摘要:Nio空轮询bug在哪里体现,并如何解决? 在NioEventLoop中,run方法中是一个死循环,所以需要通过调用selector来进行阻塞。如果这个bug发生了,即使没有超时,也会不断进行循环,导致cpu占用率会到达100%。 @Override protected void run() { i
阅读全文
摘要:前言 由于整个NioEventLoop类过大,其中还有很多从父类继承的方法。所以在这里通过以问题驱动的方式,对重要部分进行逐步分析。 组成部分 Selector private Selector selector; private Selector unwrappedSelector; 线程 在父类
阅读全文
摘要:Netty源码分析-启动流程 原生NIO启动流程 // netty 中使用 NioEventLoopGroup (简称 nio boss 线程)来封装线程和 selector Selector selector = Selector.open(); // 创建 NioServerSocketChan
阅读全文
摘要:BIO NIO AIO BIO 传统的同步阻塞式I/O模型。通常由一个Acceptor线程负责监听客户端的连接,接受到客户端的连接请求之后为每个客户端创建一个新的线程进行链路处理,处理完成之后,通过输出流返回给客户端。线程销毁,也就是典型的一请求一应答通信模型。BIO读写是面向流操作的。BIO流是单
阅读全文
摘要:Linux 网络I/O模型 1. 阻塞IO模型 最常用的I/O模型,缺省情形下,所有文件操作都是阻塞的。进程空间调用recvfrom函数,直到数据包到达且被复制到应用进程的缓冲区中或者发生错误时才返回,在此期间,进程会被阻塞一直等待。 2. 非阻塞IO模型 recvfrom函数当发现内核缓冲区没有数
阅读全文