高性能网络模型

Reactor

单Reactor单线程/进程模型

在这里插入图片描述

  • Reactor对象的作用是监听和分发事件
  • Accept的作用是来获取连接的
  • Handler就是来处理业务的

执行流程

  • Reactor对象通过select(IO多路复用接口)监听事件,收到后通过dispatch进行分发,具体是发给Handler还是Acceptor还得看具体的事件
  • 如果是建立连接的请求,就交给Acceptor处理,通过accept方法建立连接并且生成一个handler处理后续的事情
  • 如果不是连接事件就交给Handler区处理

缺点

  • 只有一个线程或者进程,无法充分利用CPU的性能
  • 如果在Handler处理事件的时候,整个整个线程无法处理其他的事件

单Reactor多线程

在这里插入图片描述

执行流程

  • Reactor 对象通过 select (IO 多路复⽤接⼝) 监听事件,收到事件后通过 dispatch 进⾏分发,具体分发给 Acceptor 对象还是 Handler 对象,还要看收到的事件类型;
  • 如果是连接建⽴的事件,则交由 Acceptor 对象进⾏处理,Acceptor 对象会通过 accept ⽅法 获取连接,并创建⼀个 Handler 对象来处理后续的响应事件;如果不是连接建⽴事件, 则交由当前连接对应的 Handler 对象来进⾏响应
  • Handler不再负责业务处理,只负责数据的接收和发送,Handler在read读取数据之后,会将数据发送给子线程的Process去处理

缺点

  • 只有一个Reactor负责接收和监听的话,在面对高并发的时候,可能成为性能瓶颈

多Reactor多线程

在这里插入图片描述

执行流程

  • 主线程中的MainReactor对象通过select监控建立事件,收到事件之后通过Acceptor对象接力起连接,并将连接派发给某个子线程
  • 子线程中的subReacotr对象将MainReactor对象分配的连接加入到select继续监听,并创建一个Handler处理相应的事件

Proactor

定义:Reactor是非阻塞同步网络模式,Proactor是异步网络模型

Reactor和Proactor的区别

  • Reactor是非阻塞同步网络模式,感知的是就绪可读事件。每次感知到有事件发生的时候,就需要应用程序主动调用read方法,完成数据的读写,也就是应用程序主动将socket接收缓存中的数据读到应用内存中,这个过程是同步,读完数据之后才能处理数据
  • Proactor是异步网络模型,感知的是已完成的读写事件,读写都是用操作系统完成的,不需要像Reactor一样主动发起read/write来读写数据

Proactor的流程

在这里插入图片描述

  • Proactor Initiator负责创建Proactor和Handler,并将Proactor和handler都通过Asynchronous Operation Processor 注册到内核
  • Asynchronous Operation Processor 负责处理注册请求,并处理 I/O 操作
  • Asynchronous Operation Processor 完成 I/O 操作后通知 Proactor
  • Proactor 根据不同的事件类型回调不同的 Handler 进⾏业务处理;
  • Handler 完成业务处理
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值