Linux IO模型漫谈(2)

简介:

不管Linux的IO模型的阻塞同步分类是如何分类,几种IO模型的具体实现是确定的。这里借用《Unix 网络编程:卷一》的图片说明。

1 阻塞式IO模型

clip_image001

这个模型也是最容易理解的

程序调用和我们基本的程序编写是一致的:

fd = connect()

write(fd)

read(fd)

close(fd)

程序的read必须在write之后执行,当write阻塞住了,read就不能执行下去

2 非阻塞IO模型

clip_image002

从图中可以看出来,这是一个轮询的过程

每次用户询问内核是否有数据报准备好(文件描述符缓冲区是否就绪),当数据报准备好的时候,就进行拷贝数据报的操作。当数据报没有准备好的时候,也不阻塞程序,内核直接返回未准备就绪的信号,等待用户程序的下一次轮询。

3 I/O复用模型

clip_image003

IO复用模型是多了一个select函数,select函数有一个参数是文件描述符集合,意思就是对这些的文件描述符进行循环监听,当某个文件描述符就绪的时候,就对这个文件描述符进行处理。

这种IO模型是属于阻塞的IO。但是由于它可以对多个文件描述符进行阻塞监听,所以它的效率比阻塞IO模型高效。

4 信号驱动IO模型

clip_image004

信号驱动IO模型是应用进程告诉内核:当你的数据报准备好的时候,给我发送一个信号哈,并且调用我的信号处理函数来获取数据报。这个模型是由信号进行驱动。

5 异步IO模型

clip_image005

异步IO使用的不再是read和write的系统接口了,应用工程序调用aio_XXXX系列的内核接口。

当应用程序调用aio_read的时候,内核一方面去取数据报内容返回,另外一方面将程序控制权还给应用进程,应用进程继续处理其他事务。这样应用进程就是一种非阻塞的状态。

当内核的数据报就绪的时候,是由内核将数据报拷贝到应用进程中,返回给aio_read中定义好的函数处理程序。

目录
相关文章
|
机器学习/深度学习 计算机视觉
YOLOv5改进 | EIoU、SIoU、WIoU、DIoU、FocusIoU等二十余种损失函数
YOLOv5改进 | EIoU、SIoU、WIoU、DIoU、FocusIoU等二十余种损失函数
3425 0
|
9月前
|
人工智能 小程序 JavaScript
【一步步开发AI运动小程序】十四、插件内置的运动项目,如何进行微调,以适配多场景?
云智「AI运动识别引擎」支持人体姿态识别与多种运动计时计数,适用于AI体育、全民健身等场景。针对大众化应用识别门槛高问题,开放内置分析器参数微调功能,开发者可调整检测规则,适配“初学”到“专业”多级别需求,提升用户体验,助力AI运动应用灵活落地。
|
人工智能
提示工程:与你AI伙伴高效沟通的艺术
提示工程:与你AI伙伴高效沟通的艺术
455 2
|
存储 SQL 缓存
StarRocks 存算分离在京东物流的落地实践
本文分享了京东物流在StarRocks存算分离架构上的实践与成果。通过将UData平台从存算一体升级为存算分离,显著提升了查询性能和资源利用率,同时大幅降低了存储成本(90%)和计算资源成本(30%)。文章详细介绍了存算分离的背景、部署方案、性能表现及优化措施,包括联邦查询、实时写入、Compaction调优等关键技术点。未来,京东物流将持续推动存算分离的应用拓展,并探索更多降本增效策略,如Stream Load任务合并与主动缓存管理。
|
JavaScript
Threejs加载MMD
这篇文章详细介绍了如何在Three.js中加载和使用MMD(MikuMikuDance)模型,包括模型的导入、动画的播放以及与MMD相关的文件格式和操作流程。
1579 2
Threejs加载MMD
|
数据采集 SQL 数据管理
读数据质量管理:数据可靠性与数据质量问题解决之道05数据标准化
【11月更文挑战第9天】《数据质量管理:数据可靠性与数据质量问题解决之道 - 05 数据标准化》介绍了数据标准化在数据质量管理中的重要性。文章从提高数据一致性、提升数据整合效率、增强数据分析准确性三个方面阐述了数据标准化的关键作用,并详细说明了格式、编码、度量单位的标准化内容及实施方法。此外,还介绍了常用的数据清洗工具和编程语言,以及数据标准化的实施流程,包括现状评估、标准制定、数据转换和验证监控。
664 8
|
存储 Java 编译器
经验总结:源代码-目标代码的区别
源代码是由程序员用高级语言编写的可读文本文件,需编译成机器可执行的二进制目标代码。目标代码由编译器生成,包含机器指令,对机器可读但对人类不易理解。源代码便于修改,而目标代码需重新编译以反映更改。源代码不受系统限制,目标代码则特定于系统。此外,链接程序处理源文件间及库函数的引用,将目标文件连接成可执行文件。Java中的本地方法则允许调用非Java语言编写的代码,实现与底层系统的交互,提高程序性能或实现特定功能。
1176 5
|
监控 Linux Shell
但凡我早点知道这个Linux批量ping的脚本,也不至于现在还单身!
但凡我早点知道这个Linux批量ping的脚本,也不至于现在还单身!
801 1
|
JSON 数据格式 计算机视觉
Opencv实用笔记(一): 获取并绘制JSON标注文件目标区域(可单独保存目标小图)
本文介绍了如何使用OpenCV和Python根据JSON标注文件获取并绘制目标区域,同时可将裁剪的图像单独保存。通过示例代码,展示了如何读取图片路径、解析JSON标注、绘制标注框并保存裁剪图像的过程。此外,还提供了相关的博客链接,供读者进一步学习。
700 0
|
人工智能 安全 机器人
Grok开源来看看怎么用吧
Grok开源来看看怎么用吧
747 2

热门文章

最新文章