美文网首页
Reactor线程模型

Reactor线程模型

作者: 倚仗听江 | 来源:发表于2021-01-04 09:32 被阅读0次

    1. 单线程模型

    所有的IO操作都由同一个NIO线程处理,此时NIO线程职责包括:接收新建连接请求、读写操作等。(在一些小容量应用场景下,可以使用单线程模型)


    image.png

    举一个例子:我开了一个饭店,什么事我都亲力亲为。招待客人、做菜、结账都由我一个人来做,此时的我就是Reactor单线程。当我的饭店生意特别好,客人很多时,就会忙不过来,对应到这里就是网络请求会很慢,甚至出现服务器的宕机。

    2. 多线程模型

    有一组 NIO 线程来处理连接读写操作,由一个单线程来接收客户端连接,连接后丢给线程池,由线程池来完成读写请求。
    举一个例子:饭店生意很好,所以我招了一个人专门在门口接待客人,让她把客人带进来,带进来之后的事情她就不能管了,从另外的一组人中叫一个出来来负责这个客人。


    image.png

    在绝大多数场景下,Reactor 多线程模型可以满足性能需求。但是,在个别特殊场景中,一个 NIO 线程负责监听和处理所有的客户端连接可能会存在性能问题。例如并发百万客户端连接,或者服务端需要对客户端握手进行安全认证,但是认证本身非常损耗性能。

    3. 主从线程模型(Netty官方推荐)

    服务端用于接收客户端连接的不再是一个单独的 NIO 线程,而是一个独立的 NIO 线程池。一组线程池接收请求,一组线程池处理IO。主线程池主要负责客户端登录、握手、安全认证等等,一旦链路建立完毕,就会把请求丢给从线程池。从线程池负责编解码、读写等等。


    image.png

    对应到例子就是在门口的小姐姐忙不过来了,所以我多招了几个小姐姐来负责接待客人。

    相关文章

      网友评论

          本文标题:Reactor线程模型

          本文链接:https://www.haomeiwen.com/subject/etfroktx.html