Netty——IO模型,线程模型

2020-11-11  本文已影响0人  StevenHD

一、BIO——同步阻塞

连接建立后并不是时时刻刻都会进行读写数据的,但是在空闲时候服务器也要维护这个连接,就会导致服务器压力太大

二、NIO——同步非阻塞

一个线程维护多个连接


NIO模型

三、AIO——异步非阻塞

四、线程模型

Handler是一个【阻塞对象】

五、Reactor模式——反应器模式

Reactor模式

也叫【分发者模式】,【通知者模式】

关键点:

  • 当初的多个阻塞对象换成了一个阻塞对象
  • 线程池


    Reactor详细示意图

六、Reactor模式中的核心组成

  1. Reactor——示意图中的ServicHandler
  2. Handlers——示意图中的EventHandler
    Reactor和Handlers
    Reactor模式分类

七、单Reactor单线程

单Reactor单线程

Handler那里在【进行读写】的时候还是会阻塞

优缺点

八、单Reactor多线程

单Reactor多线程
  • 创建多个Handler对象
  • 这里的Handler对象不做具体的业务处理,将业务处理分发给Worker线程池,然后Worker线程池再分配【独立的线程】来完成真正的业务

注:Handler还会收到Worker返回的结果然后send给客户端

对比一下,其实【单Reactor多线程】和【单Reactor单线程】最大的不同就是将【业务处理部分】拿去给Worker线程池来处理,本身还是会造成Reator需要处理所有事件监听和响应的问题。

优缺点

九、主从Reactor多线程

分成了3级

【MainReactor对象】是通过select()函数来监听【连接事件】的
【SubReactor对象】还是可以监听的,因为它依然有select()函数;【SubReactor对象】还会创建【Handler对象】进行各种事件的处理
【Handler对象】有read()send()函数
将结果发回给【Client对象】的是【Handler对象】
将结果发回给【Handler对象】的是【worker对象】

【MainReactor】可以关联多个【SubReactor对象】

上一篇 下一篇

猜你喜欢

热点阅读