通信机制技术干货程序员

浅显易懂之线程模型的演变

2017-03-02  本文已影响105人  sun4lower

本文旨在通过一个实际工作中例子让大家理解线程模型的演变,从而对 Netty 的模型有一个粗略的印象,面向的是想初步了解 Netty 原理的读者,而并不关心具体的执行细节和相关术语的描述。

单线程

单线程映射到我们的实际工作中就是由一个人完成所有的工作,如下图所示:

A 自己独立的完成全部的Job

多线程

多线程映射到我们的工作中就是多个人共同协作完成工作,如下图所示:

A、B、C 三人工作完成工作,每个人会分到具体的工作去执行,较之单线程,执行效率提高。

线程池

多个 Worker(A、B、C等)已经准备好去完成即将到来的Job,当Job 1过来的时候,会从线程池中选择一个线程也就是Worker(A)来完成这项任务,完成之后A仍然要回到线程池中,等待下一个工作的到来。

Reactor单线程模型

Reactor 的单线程模型映射到实际工作中如下图所示:

我们有一个Boss来接收具体的Job,然后Boss将具体接收到的Job分配给已经准备好的Worker,交给具体的Worker来完成最终的Job,但是如果Job非常多的时候,Boss的压力就会越来越大,所以Boss成为了性能的瓶颈,而下面提到的Reactor多线程模型就是为了解决这个问题而产生的。

Reactor多线程模型

为了完善Reactor单线程模型,Reactor多线程模型进行了优化:

和Reactor单线程模型相比,Reactor多线程模型增加了一个从Manager pool选择Manager(相当于项目经理)的过程,即通过Manager来帮助Boss分配具体的Job给Worker,例如图中选择了M1,那么M1就会去完成选择Worker的工作,虚线代表选择了M2或者M3。

Netty的具体实现就类似于Reactor的多线程模型,而Spark现在Rpc的底层就是通过Netty来实现的。

至此本文的目的已经达到,如果想要更加详细的了解Netty的具体实现细节和NIO相关的知识可以参考如下文章:

Netty系列之Netty线程模型

并发编程网有关Netty的部分

Netty官方网站

Java NIO Tutorial

本文为原创,欢迎转载,转载请注明出处、作者,谢谢!

上一篇下一篇

猜你喜欢

热点阅读