| |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| -> 系统运维 -> 【Linux 网络编程】生动讲解 Reactor 模式与 Proactor 模式 -> 正文阅读 |
|
|
[系统运维]【Linux 网络编程】生动讲解 Reactor 模式与 Proactor 模式 |
五种 I/O 模型先花费点时间了解这几种 I/O 模型,有助于后面的理解。 阻塞 I/O 与非阻塞 I/O阻塞和非阻塞的概念能应用于所有的文件描述符,而不仅仅是 socket。我们称阻塞的文件描述符为阻塞 I/O,称非阻塞的文件描述符为非阻塞 I/O。 socket 在创建的时候默认是阻塞的,我们可以给 socket 系统调用的第 2 个参数传递
很显然,只有在事件已经发生的情况下操作非阻塞 I/O(读、写等),才能提高程序的效率。因此,非阻塞 I/O 通常要和其他 I/O 通知机制一起使用,比如 I/O 复用和 SIGIO 信号。
I/O 复用I/O 复用是一种 I/O 通知机制,而且是最常用的通知机制。 I/O 复用是指应用程序通过 I/O 复用函数(select、poll、epoll_wait)向内核注册一组事件,内核通过 I/O 复用函数把其中就绪的事件通知给应用程序。 需要注意的是 I/O 复用函数本身是阻塞的,它们能提高程序效率的原因在于它们具有同时监听多个 I/O 事件的能力。 信号驱动 I/O为一个目标文件描述符指定宿主进程,那么被指定的宿主进程将捕获到 异步 I/O理论上讲,阻塞 I/O、非阻塞 I/O、信号驱动 I/O 和 I/O 复用都是同步 I/O。
对异步 I/O 而言,用户可以直接对 I/O 执行读写操作,这些操作告诉内核用户读写缓冲区的位置,以及 I/O 操作完成之后内核通知应用程序的方式。异步 I/O 的读写操作总是立即返回,不论 I/O 是否是阻塞的,因为真正的读写操作已经由内核接管。 两种高效的事件处理模式Reactor 模式Reactor 模式要求主线程(I/O 处理单元)只负责监听文件描述符上是否有事件发生。有的话立即通知工作线程(逻辑单元),读写数据、接受新的连接及处理客户请求均在工作线程中完成。通常由同步I/O实现。 工作流程:
Proactor 模式Proactor 模式将所有的 I/O 操作都交给主线程和内核来处理,工作线程仅仅负责业务逻辑。通常由异步 I/O ( 工作流程
模拟 Proactor 模式由于 Proactor 模式需要异步 I/O 来实现,这里提出使用同步 I/O 的方式模拟出 Proactor 模式的一种方法。其原理是:主线程执行数据读写操作,读写完成后,主线程向工作线程通知这一“完成事件”。那么从工作线程的角度来看,它们就直接获得了数据读写的结果,接下来要做的只是对读写的结果进行逻辑处理。 工作流程
|
|
|
|
|
| 上一篇文章 下一篇文章 查看所有文章 |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| 360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年11日历 | -2025/11/30 11:52:48- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |