当前位置: 首页 > news >正文

IO模型多路转接

输入:外面数据交给进程的数据叫做输入。软件层面上,硬件交给系统叫做输入;

输出:从进程里出去的数据。软件层面上,系统交给硬件叫做输出。

IO=等+拷贝

高效的io本质就是单位时间内减少等的比重。

五种IO模型:

阻塞IO和非阻塞IO:两者等的方式不同,但是拷贝的数据是一样的!

信号驱动

多路复用/多路转接IO:IO多 路转接能够同时等待多个文件描述符的就绪状态

上述4中叫做同步IO(参与IO,继续进行等+拷贝);

异步IO(没有参与IO,IO=等+拷贝 ):

阻塞IO是最常见的IO模型. 

非阻塞IO:

一个文件描述符,默认都是阻塞IO.变成非阻塞需要fcntl函数。

 此处只是用第三种功能,获取/设置文件状态标记,就可以将一个文件描述符设置为 非阻塞。

void SetNoBlock(int fd) {//非阻塞函数使用int fl = fcntl(fd, F_GETFL);//F_GETFL将当前的文件描述符的属性取出来(这是一个位图).if (fl < 0) {perror("fcntl");return;}fcntl(fd, F_SETFL, fl | O_NONBLOCK);//用F_SETFL将文件描述符设置回去.设置回去的同时,加上一个
O_NONBLOCK参数.}

多路转接---Select:

select定位:只负责等,不负责拷贝。

作用:程序会停在select这里等待,直到被监视的文件描述符有一个或多个发生了状态改变(等待fd上面的数据就绪)通知进程可以进行IO拷贝。

多路转接---epoll:

poll作用:为了等待多个fd,等待fd上面的事件就绪,通知程序员,时间已就绪,可以进行IO拷贝了。

poll只负责等。

 poll 的优点:

不同于select使用三个位图来表示三个fdset的方式,poll使用一个pollfd的指针实现。

pollfd结构包含了要监视的event和发生的event,不再使用select“参数-值”传递的方式.接口使用比select更方便。

poll并没有最大数量限制(但是数量过大后性能也是会下降)。

多路转接---epoll:

epoll:为了等待多个fd,等待fd上面的事件就绪,通知程序员,时间已就绪,可以进行IO拷贝了。

epoll接口函数:

 epoll原理:

当某一进程调用epoll_create方法时,Linux内核会创建一个eventpoll结构 体,这个结构体中有两个成员与epoll的使用方式密切相关.

调用epoll_create创建一个epoll句柄;

调用epoll_ctl,将要监控的文件描述符进行注册; 

调用epoll_wait, 等待文件描述符就绪


文章转载自:

http://f1tWptm4.Lkkgq.cn
http://pfaJk8wz.Lkkgq.cn
http://9LkbcpCC.Lkkgq.cn
http://5mc3tWwg.Lkkgq.cn
http://z7d50qjA.Lkkgq.cn
http://qVRqJAxm.Lkkgq.cn
http://XqY8kKPO.Lkkgq.cn
http://9EM7I58z.Lkkgq.cn
http://o4NcK5gg.Lkkgq.cn
http://p1iZ7vRc.Lkkgq.cn
http://5IqH75UE.Lkkgq.cn
http://QSHbcGV2.Lkkgq.cn
http://IlwbudQu.Lkkgq.cn
http://TGcUVdkz.Lkkgq.cn
http://xO6qex7x.Lkkgq.cn
http://kRSBTiSp.Lkkgq.cn
http://gFeqQe7g.Lkkgq.cn
http://0Cm4a6bP.Lkkgq.cn
http://xGaJjSKF.Lkkgq.cn
http://X6G6coXk.Lkkgq.cn
http://0UKcLaJi.Lkkgq.cn
http://LQJM41gJ.Lkkgq.cn
http://Xtx5JnN7.Lkkgq.cn
http://PJyhQMN9.Lkkgq.cn
http://PrRU9Ebh.Lkkgq.cn
http://TpGXWtlL.Lkkgq.cn
http://hYqWaM1K.Lkkgq.cn
http://6tBPsnTg.Lkkgq.cn
http://JayX3skH.Lkkgq.cn
http://l3LJ0xQ4.Lkkgq.cn
http://www.dtcms.com/a/372472.html

相关文章:

  • Python-基础语法
  • FastApi框架
  • 单片机的bin、exe、elf、hex文件差异
  • 基于ResNet50的智能垃圾分类系统
  • 大模型推理参数讲解
  • Linux 性能调优之 OOM Killer 的认知与观测
  • Linux->日志的实现
  • 西门子 S7-200 SMART PLC :3 台电机顺启逆停控制(上篇)
  • SAP系统两种部署方式:公有云VS私有云 企业如何选择?
  • 用博图FB类比c#中sdk的api
  • 8.渗透-.虚拟机安装
  • Redis基础(含常用命令等以快速入门)
  • 做T投资学:从入门到精通
  • 特征平台学习总结
  • 每天五分钟深度学习:前向算损失,反向算梯度,梯度下降更新参数
  • 淘宝商品详情高级版(item_get_pro)调用详解
  • python进程,线程与协程
  • [特殊字符] 基于Qwen Coder的上下文工程编程框架,为AI辅助开发提供标准化流程
  • 升级PyCharm后,解释器配置正确、模块安装正确,但脚本就是找不到
  • 实现自己的AI视频监控系统-第四章-基于langchain的AI大模型与智能体应用1
  • 155. 最小栈
  • 【开题答辩全过程】以 基于微信小程序校园综合服务平台的设计与实现为例,包含答辩的问题和答案
  • 001-Pandas的数据结构
  • QProxyStyle类中的drawPrimitive函数的作用
  • LangChain4j RAG流程全解析
  • 【应用案例】AI 给医用过滤器 “找茬”:3 大难点 + 全流程解决方案
  • VBA之Word应用第四章第二节:段落集合Paragraphs对象(二)
  • Git 工作流与分支管理实战:rebase vs merge 对比、冲突解决、规范 Commit Message 与主干稳定性最佳实践
  • 《沈南鹏传 - 做最擅长的事》(上篇)天才的成长之路-读书笔记
  • C++笔记之同步信号量、互斥信号量与PV操作再探(含软考题目)