文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

高性能 IO模型:Reactor vs Proactor ,如何工作?

2024-11-29 20:16

关注

一、为什么要学习

万丈高楼平地起,要想在技术上有所成就,就一定要修练好内功。随着互联网的快速发展,技术更迭的速度也是超乎想象,也许花大力气掌握的技能几年就过时了(比如 JSP,sturts/sturts2),但是有一些东西却是历久弥新,比如:架构思想,设计思维,掌握了这些精髓,可以帮助你快速适应技术更迭。Reactor 和 Proactor 是网络 IO 处理中两个经典的高性能模型,学习它们可以在网络 IO 处理上获得不一样的认知,两个模型可以高度抽象为下图:

二、Reactor模型

1.定义

Reactor,中文翻译为”反应器”,它是一个被动过程,可以理解为”当接收到客户端事件后,Reactor 会根据事件类型来调用相应的代码进行处理”。Reactor 模型也叫 Dispatcher 模式,底层是 I/O 多路复用结合线程池,主要是用于服务器端处理高并发网络 IO 请求。Reactor 模型的核心思想可以总结成 2个”3种”:

2.事件

事件的描述可以参考下图:

3.角色

上述描述了 Reactor 的事件,每个事件都需要有一个专门的负责人,在 Reactor 模型中,这个负责人就是角色,其说明如下:

4.Reactor 线程模型

Reactor 线程模型有单 Reactor 单线程模型、单 Reactor 多线程模型、多 Reactor 多线程模型 三种。

(1) 单Reactor单线程模型

单 Reactor 单线程模型,很容易理解:接受请求、业务处理、响应请求都在一个线程中处理。

① 模型抽象

② 工作原理

③ 优缺点

优点是简单,不存在线程竞争,缺点是无法充分利用和发挥多核 CPU 的性能,当业务耗时很长时,容易造成阻塞。

④ 案例

(2) 单Reactor多线程模型

鉴于单 Reactor 单线程模式无法充分利用和发挥多核 CPU 的性能,于是就诞生了单 Reactor 多线程模型。

① 模型抽象图

② 工作原理

③ 优点

采用了线程池来处理业务逻辑,能够充分利用多 CPU 的处理能力

④ 缺点

⑤ 案例

Netty4 通过参数配置,可以使用单 Reactor 多线程模型;

(3) 多Reactor多线程模型

单 Reactor 多线程模型的性能瓶颈在于单个 Reactor 的处理能力,于是我们很自然的想到:能不能增加多个 Reactor来提升性能?于是,多 Reactor 多线程模型就应孕而生。

① 模型抽象图

② 工作原理

③ 优点

④ 案例

到此, Reactor模型就分析完了,需要说明的是:上文讲述的 Reactor 3种线程模型,同样可以以进程的方式部署,可能在逻辑处理上和线程有些差异。接下来再分析和 Reactor模型很类似的 Proactor 模型。

三、Proactor模型

1.定义

Proactor,中文翻译为”前摄器”,乍一看,这个翻译还是挺懵圈的,个人觉得”主动器”更符合 Proactor 模型的本意。Proactor 可以理解为“当有连接、读写等IO事件时,操作系统内核在处理完事件后主动通知我们的程序代码”。

2.模型抽象图

3.工作原理

4.优缺点

5.案例

Netty5, 它是采用 AIO,其网络通信模型就是 Proactor,但该版本已经被不再维护,主要原因是 Linux 目前对于异步的支持不完善,导致 Netty5 花了大代价,性能相对 Netty4 不但没有提升,甚至还会降低。

四、总结

(1) Reactor 是同步非阻塞网络模型,Proactor 是异步非阻塞网络模型;

(2) Reactor 是 I/O 多路复用和线程池的完美结合;

(3) Reactor模型看似高深,其实是生活中很多真实案例的写照,比如:

(4) Reactor思维在日常开发中也会经常使用,最常用的是单线程处理,当并发量比较大时引进线程池,把业务细分,专门的线程处理专门的事情,这样就和 Reactor 模型的演变有异曲同工之妙;

(5) Proactor 主要是采用异步的方式来处理 IO 事件(比如:叫外卖,下单支付后不需要关注,直接处理自己的事情,等外卖好了之后,外卖小哥会把主动把外卖送到你手上),不过目前 Linux 对 AIO支持的不太友好,使用该模型的 Netty5 最终也为此夭折了;

来源:猿java内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯