彻底搞懂 netty 线程模型
编者注:Netty是Java领域有名的开源网络库,特点是高性能和高扩展性,因此很多流行的框架都是基于它来构建的,比如我们熟知的Dubbo、Rocketmq、Hadoop等。本文就netty线程模型展开分析讨论下 : ) IO模型 BIO:同步阻塞IO模型; NIO:基于IO多路复用技术的“非阻塞同步”IO模型。简单来说,内核将可读可写事件通知应用,由应用主动发起读写操作; AIO:非阻塞异步IO模型。简单来说,内核将读完成事件通知应用,读操作由内核完成,应用只需操作数据即可;应用做异步写操作时立即返回,内核会进行写操作排队并执行写操作。 NIO和AIO不同之处在于应用是否进行真正的读写操作。 reactor和proactor模型 reactor:基于NIO技术,可读可写时通知应用; proactor:基于AIO技术,读完成时通知应用,写操作应用通知内核。 netty线程模型 netty的线程模型是基于Reactor模型的。 netty单线程模型 Reactor 单线程模型,是指所有的 I/O 操作都在同一个 NIO 线程上面完成的,此时NIO线程职责包括:接收新建连接请求、读写操作等。 在一些小容量应用场景下,可以使用单线程模型( 注意,Redis的请求处理也是单线程模型,为什么Redis的性能会如此之高呢?因为Redis的读写操作基本都是内存操作,并且Redis协议比较简洁