I/O模型

马谦马谦马谦
马谦马谦马谦
马谦马谦马谦
606
文章
12
评论
2020年2月29日15:54:15 评论

一、I/O模型分类

unix环境下有5中IO模型:

  • 阻塞式I/O
  • 非阻塞式I/O
  • I/O多路复用
  • 信号驱动I/O
  • 异步I/O(POSIX中的aio_系列函数)

常用的是前三种方式,特别是多路I/O复用是目前使用最广泛的I/O模型。它不仅包含了阻塞和非阻塞,同时也包含了异步调用。非阻塞+异步是效率最高的I/O方式。

二、阻塞式I/O

阻塞I/O的意思是:调用读写函数时,系统会卡在当前函数,直到有数据可读或者可写才返回。

工作流程图:

I/O模型

三、非阻塞式I/O

非阻塞I/O的意思是:调用函数时如果没有数据可读,立马返回。然后开始轮询,直到有数据返回为止。

工作流程图:

I/O模型

四、多路I/O复用

多路I/O复用:通过多路IO复用模型(select/poll/epoll)同时监听多个套接字,等待某个套接字有数据到达时再执行系统调用。

工作流程图:

I/O模型

马谦马谦马谦
  • 本文由 发表于 2020年2月29日15:54:15
  • 转载请务必保留本文链接:https://www.dyxmq.cn/program/code/io-model-in-unix.html
如何通过原始套接字修改IP数据包头 编程语言

如何通过原始套接字修改IP数据包头

背景:我们的设备上有个链路探测的功能,会定时请求公网的某个IP地址,以探测网络是不是连通的。具体的做法是会使用icmp或dns探测远端服务器,看请求能否正常响应,如果有响应,则认为链路正常,否则则认为...
给socket分配随机端口 C/C++

给socket分配随机端口

客户端的socket不需要手动执行bind绑定地址,但这不意味着客户端socket真的不需要绑定端口,实际上是内核它帮我们做了这个操作,在执行connect时,内核发现没有绑定端口,就会自动选择一个合...
epoll中的边缘触发ET和水平触发LT模式 C/C++

epoll中的边缘触发ET和水平触发LT模式

epoll中的触发模式有两种,边缘触发和水平触发,默认情况下使用的是水平触发。 边缘触发(ET)的意思是当电平出现变化的时候才触发事件,如果设置了边缘触发,执行epoll_wait时,内核检测到数据到...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: