【Linux网络编程】高级I/O

目录

五种I/O模型

阻塞和非阻塞

非阻塞I/O

I/O多路复用之Select、Poll、与Epoll


本文目的是深入浅出理解高级I/O相关的知识,结尾附上代码加深理解相关知识。

五种I/O模型

1.阻塞I/O:在内核将数据准备好之前,系统调用会一直等待。所有的套接字默认都是阻塞方式。

2.非阻塞I/O:如果内核还未将数据准备好,系统调用仍然会直接返回,并且返回EWOULDBLOCK错误码。非阻塞I/O往往需要程序员利用循环的方式反复尝试读写文件描述符,这个过程称为轮询。这对cpu来说是较大的浪费,一般只有特定场景下才使用。

3.信号驱动I/O:内核将数据准备好的时候,使用SIGIO信号通知应用程序进行I/O操作。

4.I/O多路转接:同时等待多个文件描述符的就绪状态。

5.异步I/O:由内核在数据拷贝给用户空间完成时,通知应用程序处理(这里和信号驱动I/O不同,信号驱动是通知应用程序何时可以开始拷贝数据)。所以异步是最偷懒的,只需要等待数据到来就可以,并不需要等待数据就绪,也不用拷贝,操作系统就帮上层做了。

总结:任何I/O过程中,都包含两个步骤,一是等待,二是拷贝。并且在实际的应用场景中,等待消耗的时间往往都远远高于拷贝的时间。为了让I/O更高效,最核心的办法就是让等待时间尽量少。

阻塞和非阻塞

阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态。

阻塞调用是指调用结果返回之前,当前线程会被挂起,调用线程只有在得到结果之后才会返回。

非阻塞调用指在不能立即得到结果之前,该调用不会阻塞当前线程。

非阻塞I/O

fcntl函数

fcntl函数有五种功能:
1.复制一个现有的描述符(cmd=F_DUPFD)
2.获得/设置文件描述符标记(cmd=F_GETFD或F_SETFD)
3.获得/设置文件状态标记(cmd=F_GETFL或F_SETFL)
4.获得/设置异步I/O所有权(cmd=F_GETOWN或F_SETOWN)
5.获得/设置记录锁(cmd=F_GETLK,F_SETLK或F_SETLKW)
我们此处只是用第三种功能 , 获取 / 设置文件状态标记 , 就可以将一个文件描述符设置为非阻塞。

下面是关于fcntl函数的代码: 因为放在这里有点长不太好看,我单独弄了一篇文章。

fcntl函数 非阻塞轮询_小鳄鱼爱吃薯片的博客-CSDN博客

I/O多路复用之Select、Poll、与Epoll

为了防止文章冗余,下面省略了select、poll的代码并附有链接。

Select:Select简易代码

Poll:Poll简易代码 

Epoll:

Select、Poll、Epoll的优缺点

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/190260.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CTFHub | Cookie注入,UA注入,Refer注入,过滤空格(利用hackbar插件)

Cookie注入 Cookie 注入原理 Cookie 注入的原理也和其他注入一样,只不过是将提交的参数以 Cookie 方式提交,而一般的注入是使用 GET 或者 POST 方式提交,GET 方式提交就是直接在网址后面加上需要注入的语句,POST 方式则是通过表单…

不允许你还没有了解哈希表、哈希桶、哈希冲突的解决,如何避免冲突

✏️✏️✏️今天给各位带来的是哈希桶、哈希冲突方面的知识。 清风的CSDN博客 😛😛😛希望我的文章能对你有所帮助,有不足的地方还请各位看官多多指教,大家一起学习交流! 动动你们发财的小手,点…

springboot项目yml文件中使用${}配置

1、传统写法 (1)配置服务启动端口 # 服务端口 server:port: 9898 (2)使用idea启动 (3)使用jar包启动 2、使用${}写法 格式:${自定义参数名:默认值} 作用: 项目启动时动态配置变量…

社区无人零售:投资新热点,创业新机遇

社区无人零售是一个备受关注的创业项目,被视为投资的“爆点”。与其他国家相比,无人零售在国内市场远未达到饱和,因此成为了当下的新风口。今天,我将详细分析这个创业项目,以帮助感兴趣的朋友们了解更多。 首先&#x…

邀请报名|11月24日阿里云原生 Serverless 技术实践营 深圳站

活动简介 “阿里云云原生 Serverless 技术实践营 ” 是一场以 Serverless 为主题的开发者活动,活动受众以关注 Serverless 技术的开发者、企业决策人、云原生领域创业者为主,活动形式为演讲、动手实操,让开发者通过一个下午的时间增进对 Ser…

动 态 规 划

一、(what?) 二、(why?) 三、(how?) 四、典型例题分析: 例题1:神奇的兔子序列 输入:月数 输出:兔子数 思路&#xff1…

SecureCRT的“New line mode“

New line mode选中与不选中啥区别 在SecureCRT中,"New line mode"是一个关键配置项,主要用于解决不同操作系统之间的换行问题。当不选中"New line mode"时,SecureCRT会将接收到的数据按照原样发送,不会对数据…

基于Vue+SpringBoot的高校学生管理系统 开源项目

项目编号: S 029 ,文末获取源码。 \color{red}{项目编号:S029,文末获取源码。} 项目编号:S029,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 学生管理模块2.2 学院课程模块2.3 学…

回 溯 法

一、(what?) 二、(why?) 三、(how?) 四、典型例题分析: 例题1:大卖场购物车2——0-1背包问题 问题分析: 算法设计: 图…

for,while,do-while,死循环,嵌套循环,跳转关键字,随机数

1.for循环 public class ForDemo1 {public static void main(String[] args) {for (int i 0; i < 5; i) {System.out.println("HelloWorld");}System.out.println("--------------------------------------------");for (int i 1; i <10 ; i) {Sy…

反激变压器计算方法_笔记

反激变压器计算方法_笔记 匝数比原边电感选定磁芯线圈匝数线径 原视频链接 匝数比 5V 是想要得到的输出电压 0.7V为二极管导通的压降 185Vx根号2是有效值 最大占空比取0.4。得出最小匝数为30。 更改某些值可能得出来的匝数比就不一定是30了&#xff0c; 这其实也是反激变压器…

PS学习笔记——新建文档/修改文档

文章目录 新建文档文档属性像素/分辨率颜色模式背景内容高级选项存储预设 修改文档 新建文档 方法一&#xff1a;ctrlN快捷键可直接打开新建文档界面 方法二&#xff1a;点击菜单栏中 文件->新建&#xff0c;即可打开新建文档界面 文档参数可按需调节(标题可以提前设定或者…