Netty线程模型

Netty精粹之基于EventLoop机制的高效线程模型

情到浓时终转凉″ 提交于 2019-11-29 00:15:32
Infoq有篇文章提到通过Netty4+Thrift压缩二进制编码技术有人实现了10W TPS(1K的复杂POJO对象)跨节点远程服务调用,对于RPC应用来说高性能的三个主题永远是IO模型、数据协议、线程模型,10W TPS的测试结果一方面归功于Thrift方面压缩二进制编码技术的高效( 这里 有protobuf和thrift相关测试数据)。另一方面还要归功于Netty精心设计的高效线程模型。本文主要对Netty线程模型的设计进行分析,结合对比JavaScript或Node单线程模型的设计与实现,以及对IO密集型和计算密集型应用方面线程模型的设计进行一些思考。 单线程Reactor模式 Netty线程模型总体上可以说是Reactor模式的一种变种,我们先看看什么是Reactor模式。这里主要参考维基百科上对Ractor的定义与描述。 Reactor模式是一种事件处理模式,单个或多个事件(Event)并发地投递到事件处理服务(Service Handler),事件处理服务将事件进行分离,同步的将他们分发到对应的事件处理器中去处理。 Reactor模式有下面几种参与者: 资源:任何提供系统的输入或者消费系统的输出的资源,如:Socket句柄。 同步事件分离器:通常使用event loop来进行对资源的阻塞等待,当有资源就绪的时候事件分离器将资源传递给事件分发器。 事件分发器