| |
|
开发:
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模式的理解,作为新人的第一篇文章,希望它能帮到同是正在努力的你们。 ? ? ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |