IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 服务器事件处理模式之——Reactor模式 -> 正文阅读

[系统运维]服务器事件处理模式之——Reactor模式

作者:recommend-item-box type_blog clearfix

在引入Reactor模式前,我们先简单说明一下服务器的编程框架

?上图包含了服务器基本框架的各个模块,其中I/O处理单元是服务器管理客户连接的模块。它通常要完成以下工作:

1.等待并接受新的客户连接

2.接收客户数据

3.将服务器相应数据返回给客户端。

但是,数据的收发不一定在I/O处理单元中执行,也可能在逻辑单元中执行。

一个逻辑单元通常是一个进程或线程。它分析并处理客户数据,并将结果传递给I/O处理单元或者直接发送给客户端。所以数据的收发到底在哪里执行呢?是I/O处理单元?还是逻辑单元?这就取决于与本文主题密切相关的——事件处理模式

事件处理模式包括Reactor处理模式和Proactor处理模式。同步I/O模型通常用于实现Reactor模式,异步I/O模型通常用于实现Proactor模式。本篇我们主要对Reactor模式进行讲解,如果有对同步I/O模型不太懂的小伙伴,可以看后续发布的文章。

? ? ? ? Reactor模式也叫反应器设计模式,它要求主线程(I/O处理单元)只负责监听文件描述符上是否有事件发生,有的话就立即将该事件通知工作线程(逻辑单元)。除此之外,主线程不做任何其他实质性的工作。读写数据,接受新的连接,以及处理客户请求,都是在工作线程中完成。

? ? ? ? Reactor模式的具体流程如下:

通过该流程,我们可以理解Reactor模式用于并发处理多个客户端,原来的客户端和服务器是一对一的关系,而在Reactor模式下,主线程只需要完成一个中间商的任务,其余的工作都由工作线程来完成,这样就节省了很多资源,主线程可以不断地监听并分配工作,而不是什么工作都由主线程来完成。我们再举一个更加生动的例子:

一家卖衣服的商店,起初只有一名员工招待顾客,如果顾客只有一名,员工可以很好的招待顾客,但如果人多了,那么顾客等了逛了很久也得不到招待,只好离开了。

老板曾经也是一个程序员,决定采用多线程的处理方式

多雇几名员工,每来一名顾客都分配一名员工为其服务,来100个顾客就分配100名员工,虽然店铺也因为服务好评顾客越来越多。当雇到10名员工的时候老板发现员工的数量导致店铺效益并不高,于是老板准备引入线程池的思想

留下5名员工,服务完一名顾客立马去为下一名顾客服务,但是如果从顾客进门就开始为其服务,还要陪顾客挑选,讲解,碰到选择恐惧症的顾客就会浪费很多时间。

最后,聪明的老板引入了Reactor模式:

当顾客进店的时候,先任由顾客浏览挑选衣物,这个时间员工可以为其他人服务,当顾客挑选好了以后员工再把衣服找出来给顾客试穿,而这个试穿期间员工又可以为别的顾客服务,这样就大大提高了服务的效率,并且节省了资源。

以上就是我对Reactor模式的理解,作为新人的第一篇文章,希望它能帮到同是正在努力的你们。

?

?

?

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-12-01 18:06:28  更:2021-12-01 18:08:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 2:30:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码