Reactor线程模型

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fu123123fu/article/details/85076780

单线程模型(所有的IO操作都由同一个NIO线程处理)

在这里插入图片描述
原理
上图,有三个客户端连接了服务端,在服务端有一个单线程。连接都是由这个单线程处理的,连接完后需要做一些额外的操作也是由这个单线程去处理的。作为服务端,它用于接收客户端所有的连接。如果作为客户端,它就会向服务端发起所有的连接。同时,它又可以去读取请求、响应消息、发送请求等。这种线程模型其实就是一种异步非阻塞的IO,所有的IO操作都不会阻塞。理论上这样的一个单线程它是可以独立去处理所有IO相关的操作。但是这个仅仅只限于一些小型的应用场景,如果遇到高并发、高负载,这样方式就不太合适了。因为一个NIO线程要同时去处理成千上万的请求,它的性能会支撑不了。

生活案例
我开了一家饭店,然后招了一个服务员,她负责在门口接待客人并且将客人带进餐厅里面,再给客人端茶倒水。之后再去门口等着接待另外的客人。随着生意火爆起来,这个服务员明显就忙不过来了。她没法将那么多的客人一个一个接进餐厅,又一个一个的给他们端茶倒水。

多线程模型(由一组NIO线程来处理IO操作)

在这里插入图片描述
原理
上图,把原先的Reactor单线程拆分成了两块:一块是Reactor单线程,另一块是Reactor线程池。Reactor单线程只负责处理客户端的连接,如果有额外的IO操作,则交给Reactor线程池来处理。

生活案例
还是饭店这个例子,现在我安排原先的服务员就只负责在门口接待客人,当客人自己进餐厅后,会有其他的服务员来招待他们,给他们端茶倒水。这样子门口的服务员就轻松多了。但是随着饭店的名气越来越好,节假日人超级多,满大街的人都来我饭店吃饭,门口的这个服务员还是招待不过来了。

主从线程模型(一组线程池接收请求,一组线程池处理IO)

在这里插入图片描述
原理
上图,原先的单线程变成了主线程池,后面处理IO操作的线程池变成了从线程池。

生活案例
饭店的生意太火爆了,于是我又招了两个服务员负责在门口接待客人,这样子不管有多少客人来我饭店,都能把他们接待好。

猜你喜欢

转载自blog.csdn.net/fu123123fu/article/details/85076780