Netty 和 RPC 框架线程模型分析
点击上方 蓝色字体 ,选择“标星公众号” 优质文章,第一时间送达 作者: 架构师笔记 来源: http://suo.im/5D3PnG 1.背景 1.1 线程模型的重要性 对于 RPC 框架而言,影响其性能指标的主要有三个要素: I/O 模型:采用的是同步 BIO、还是非阻塞的 NIO、以及全异步的事件驱动 I/O(AIO)。 协议和序列化方式:它主要影响消息的序列化、反序列化性能,以及消息的通信效率。 线程模型:主要影响消息的读取和发送效率、以及调度的性能。 除了对性能有影响,在一些场景下,线程模型的变化也会影响到功能的正确性,例如 Netty 从 3.X 版本升级到 4.X 版本之后,重构和优化了线程模型。当业务没有意识到线程模型发生变化时,就会踩到一些性能和功能方面的坑。 1.2 Netty 和 RPC 框架的线程模型关系 作为一个高性能的 NIO 通信框架,Netty 主要关注的是 I/O 通信相关的线程工作策略,以及提供的用户扩展点 ChannelHandler 的执行策略,示例如下: 图 1 Netty 多线程模型 该线程模型的工作特点如下: 有专门一个(一组)NIO 线程 -Acceptor 线程用于监听服务端,接收客户端的 TCP 连接请求。 网络 I/O 操作 - 读、写等由一个 NIO 线程池负责,线程池可以采用标准的 JDK 线程池实现,它包含一个任务队列和