计算机操作系统学习笔记(13)——⾼性能⽹络模式:Reactor 和 Proactor

简介: 计算机操作系统学习笔记(13)——⾼性能⽹络模式:Reactor 和 Proactor

一、Reactor

Reactor 模式就是对 I/O 多路复⽤作了⼀层封装,让使⽤者不⽤考虑底层⽹络 API 的细节,只需要关注应⽤代码的编写。

I/O 多路复⽤监听事件,收到事件后,根据事件类型分配给某个进程 / 线程。

Reactor 模式主要由 Reactor 和处理资源池这两个核⼼部分组成,它俩负责的事情如下:


Reactor 负责监听和分发事件,事件类型包含连接事件、读写事件;

处理资源池负责处理事件,如 read -> 业务逻辑 -> send;

Reactor 模式是灵活多变的,可以应对不同的业务场景,灵活在于:

Reactor 的数量可以只有⼀个,也可以有多个;

处理资源池可以是单个进程 / 线程,也可以是多个进程 /线程;


单 Reactor 单进程

这种⽅案存在 2 个缺点:

第⼀个缺点,因为只有⼀个进程,⽆法充分利⽤ 多核 CPU 的性能;

第⼆个缺点,Handler 对象在业务处理时,整个进程是⽆法处理其他连接的事件的,如果业务处理耗时⽐较⻓,那么就造成响应的延迟;


所以,单 Reactor 单进程的⽅案不适⽤计算机密集型的场景,只适⽤于业务处理⾮常快速的场景。


Redis 采⽤的正是「单 Reactor 单进程」的⽅案,因为 Redis 业务处理主要是在内存中完成,性能瓶颈不在 CPU 上(不涉及CPU运算),所以 Redis 对于命令的处理是单进程的⽅案。


单 Reactor 多进程

单 Reator 多线程的⽅案优势在于能够充分利⽤多核 CPU 的性能,那既然引⼊多线程,那么⾃然就带来了多线程竞争资源的问题。

⽽多线程间可以共享数据,虽然要额外考虑并发问题,但是这远⽐进程间通信的复杂度低得多,因此实际应⽤中也看不到单 Reactor 多进程的模式。


另外,「单 Reactor」的模式还有个问题,因为⼀个 Reactor 对象承担所有事件的监听和响应,⽽且只在主线程中运⾏,在⾯对瞬间⾼并发的场景时,容易成为性能的瓶颈的地⽅。


要解决「单 Reactor」的问题,就是将「单 Reactor」实现成「多 Reactor」,这样就产⽣了多 Reactor 多进程 / 线程的⽅案。


多Reactor 多线程

⼤名鼎鼎的两个开源软件 Netty 和 Memcache 都采⽤了「多 Reactor 多线程」的⽅案。


多Reactor 多进程

采⽤了「多 Reactor 多进程」⽅案的开源软件是 Nginx


二、Proactor

Reactor 是⾮阻塞同步⽹络模式,感知的是就绪可读写事件。Proactor 是异步⽹络模式, 感知的是已完成的读写事件。


Reactor 模式是基于「待完成」的 I/O 事件,⽽ Proactor 模式则是基于「已完成」的 I/O 事件。


可惜的是,在 Linux 下的异步 I/O 是不完善的,aio 系列函数是由 POSIX 定义的异步操作接⼝,不是真正的操作系统级别⽀持的,⽽是在

⽤户空间模拟出来的异步,并且仅仅⽀持基于本地⽂件的 aio 异步操作,⽹络编程中的socket 是不⽀持的,这也使得基于 Linux 的⾼性能⽹络程序都是使⽤ Reactor ⽅案。

⽽ Windows ⾥实现了⼀套完整的⽀持 socket 的异步编程接⼝,这套接⼝就是 IOCP ,是由操作系统级别实现的异步 I/O,真正意义上异步 I/O,因此在 Windows ⾥实现⾼性能⽹络程序可以使⽤效率更⾼的 Proactor ⽅案。

目录
相关文章
|
运维 安全 Devops
Cisco NX-OS ACI 16.1(4h)F 发布 - 适用于 ACI 模式下的 Cisco Nexus 9000 系列交换机系统软件
Cisco NX-OS ACI 16.1(4h)F 发布 - 适用于 ACI 模式下的 Cisco Nexus 9000 系列交换机系统软件
55 0
|
9月前
|
存储 Linux API
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
在计算机系统的底层架构中,操作系统肩负着资源管理与任务调度的重任。当我们启动各类应用程序时,其背后复杂的运作机制便悄然展开。程序,作为静态的指令集合,如何在系统中实现动态执行?本文带你一探究竟!
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
|
4月前
|
Android开发 Windows
这是我设想的免重启操作系统的状态下更新通用计算机、嵌入式操作系统的软件设计思路
本方案提出了一种名为slfm的软件系统,旨在实现通用计算机及嵌入式系统在不重启状态下完成操作系统更新。其核心机制是通过构建独立于原系统的运行环境(slfm Recovery与The Tube),在高权限模式下进行系统文件更新与切换,确保更新过程中设备持续运行,适用于普通设备与不可中断服务的关键系统(如医疗、服务器等)。同时具备失败回滚、数据同步、权限隔离等功能,提升系统更新的安全性与可用性。
|
机器学习/深度学习 Dart 前端开发
移动应用与系统:构建现代数字生态的基石在当今这个高度数字化的社会中,移动应用与操作系统已成为我们日常生活不可或缺的一部分。它们不仅改变了我们的沟通方式,还重塑了我们的工作、学习和娱乐模式。本文将深入探讨移动应用开发的基础、移动操作系统的功能以及这两者如何共同塑造了我们的数字世界。
随着智能手机和平板电脑的普及,移动应用与系统的重要性日益凸显。它们不仅为用户提供了便捷的服务和丰富的功能,还为开发者提供了广阔的创新平台。本文将介绍移动应用开发的基本概念、技术栈以及最佳实践,并探讨主流移动操作系统的特点和发展趋势。通过分析移动应用与系统的相互作用,我们可以更好地理解它们在现代社会中的重要地位。
|
8月前
|
运维 API 开发工具
【阿里云】操作系统控制台操作体验与性能评测全解析
操作系统控制台是现代云计算环境中进行系统管理和运维的重要工具,提供系统概览、诊断、观测、管理等功能,支持API、SDK、CLI等管理方式。通过创建角色、系统配置和组件安装等操作,用户可以高效管理云端资源,提升操作系统的使用效率和稳定性。尤其适合需要高效管理操作系统的用户及学习云计算、网络管理的学生。建议增强自定义功能、优化性能报告和完善文档支持,以进一步提升用户体验。
254 21
【阿里云】操作系统控制台操作体验与性能评测全解析
|
7月前
|
安全 算法 中间件
OASA 厂商三未信安完成与 Anolis OS 及其衍生版适配,密码卡性能与稳定性获验证
验证了 Anolis OS 能够满足用户对于数据保护和隐私安全的高标准要求,可以为广大用户提供更可靠的数据保护。
|
8月前
|
存储 弹性计算 缓存
【阿里云】操作系统控制台深度体验与性能测评
本文介绍了如何通过阿里云控制台高效管理云资源,包括创建云服务器ECS、RAM授权、组件安装、系统诊断和监控等操作。阿里云控制台提供了便捷的操作界面、实时监控功能、高效的管理和安全预警,帮助用户优化云环境性能并确保业务高效运行。通过具体实例,展示了从创建ECS实例到进行系统诊断和观测的全流程,并提供了针对常见性能瓶颈的优化建议。此外,还提出了改进建议,如增加应用示例和报告存储功能,以提升用户体验。
275 21
|
11月前
|
存储 缓存 网络协议
Linux操作系统的内核优化与性能调优####
本文深入探讨了Linux操作系统内核的优化策略与性能调优方法,旨在为系统管理员和高级用户提供一套实用的指南。通过分析内核参数调整、文件系统选择、内存管理及网络配置等关键方面,本文揭示了如何有效提升Linux系统的稳定性和运行效率。不同于常规摘要仅概述内容的做法,本摘要直接指出文章的核心价值——提供具体可行的优化措施,助力读者实现系统性能的飞跃。 ####
|
12月前
|
存储 安全 固态存储
计算机启动:从插上电源到操作系统启动的全过程
当我们插上电源,计算机从休眠状态苏醒,直至操作系统完全启动,这一系列复杂的过程涉及到硬件和软件的多个层面。本文将详细解析计算机插上电源后操作系统所做的工作,揭示这一过程的技术细节。
578 6

推荐镜像

更多