服务器事件处理模式之——Reactor模式

在引入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模式的理解,作为新人的第一篇文章,希望它能帮到同是正在努力的你们。

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值