Reactor模型简介

Reactor模型:
有一个或多个并发输入源,有一个Service Handler,有多个Request Handler;这个Service Handler会同步的将输入的请求(Event)多路复用的分发给相应的Request Handler。
单线程的Reactor模型:
**所有的IO操作都由一个线程完成,即多路复用,事件分发和处理都是在一个线程上完成的。**既要接受客户端的连接请求,又向服务端
发起连接, 又要发送、读取请求或应答/响应消息。但是一个线程如果同时处理成百上千的链路,性能上会无法支撑,若某个事件体较大,则速度慢,若线程进入死循环,整个程序不可用,对于高负载,大并发的应用场景不合适

在这里插入图片描述
多线程的Reactor模型
有一个NIO线程只负责监听端口,接受客户端的TCP连接请求;NIO线程池负责网络IO的操作,即消息的读取,解码,编码和发送。但是在并发百万客户端连接请求时,一个NIO线程可能存在性能不足的问题。
在这里插入图片描述
**主从Reactor模型:**a
Acceptor线程用于绑定监听端口,接受客户端连接,将SocketChannel从主线程池的Reactor线程的多路复用器上移除,重新注册到子线程池的线程上,用于处理I/O的读写等操作,从而保证主线程只负责接入认证,握手等操作。
其实就是说在主线程监听,监听完之后把主线程监听到的事件移动到子线程上。
在这里插入图片描述
NIO就是一个典型的reactor模型,NIO采用Reactor模式的事件分离器:注册所有感兴趣的事件处理器,单线程轮询选择就绪事件,执行事件处理器。
NIO发送消息过程:
对于一次IO访问(以read为例),数据会先被拷贝到操作系统内核缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间。所以说,当一个read操作发生时,它会经历两个阶段:
1、等待数据准备 (Waiting for the data to be ready)
2、将数据从内核拷贝到进程中 (Copying the data from the kernel to the process)
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值