linux五种IO模型
2021/7/15 7:09:34
本文主要是介绍linux五种IO模型,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
linux五种IO模型,包括同步模式(阻塞模式、非阻塞模式、多路复用模式、信号驱动模式)和异步模式
在Linux中,对于一次写入IO操作,是将数据拷贝到TCP内核缓冲区;对于一次读取IO的操作,通常包括两个不同阶段:
(1)等待数据准备好,到达内核缓冲区;
(2)从内核向进程复制数据。
参考:https://blog.csdn.net/z_ryan/article/details/80873449
1.阻塞式模型
阻塞调用是指调用结果返回之前,当前线程会被挂起。函数只有在得到结果之后才会返回。
send:若TCP内核发送缓冲区已满,则阻塞等待;若未满,则拷贝数据到缓冲区,并立即返回。(数据实际是由内核协议从缓冲区发送到对端)
recv:若TCP内存接收缓冲区没有数据,则阻塞等待;若有数据,则拷贝缓冲区数据到进程空间并立即返回。
2.非阻塞模式
非阻塞调用是指无论是否可以发送成功,都立即返回。linux通过fcntl设置非阻塞模式。
send:无论TCP内核缓冲区是否已满都立即返回,返回值为实际写入缓冲区的数据长度,范围[0,实际传入数据长度]。
recv:无论TCP内核缓冲区是否有数据都立即返回,返回值为实际接收的数据长度,0表示未接收任何数据。
3.多路复用模式
一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。多路复用有select和recv两次系统调用,若同时监控的描述符不多,性能没有阻塞模式快。
select:单个进程可监视的fd数量被限制1024,描述符多时效率低。
poll:本质和select没有区别,没有fd数量限制。
epoll(epoll_ctl、epoll_wait):没有fd数量限制,效率提升,不是轮询的方式,不会随着FD数目的增加效率下降。
4.信号驱动模式
信号驱动I/O并不常用,它是一种半异步的I/O模型。在使用信号驱动I/O时,当数据准备就绪后,内核通过发送一个 SIGIO 信号通知应用进程,应用进程就可以开始读取数据了。
5.异步模式
这篇关于linux五种IO模型的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-12如何创建可引导的 ESXi USB 安装介质 (macOS, Linux, Windows)
- 2024-11-08linux的 vi编辑器中搜索关键字有哪些常用的命令和技巧?-icode9专业技术文章分享
- 2024-11-08在 Linux 的 vi 或 vim 编辑器中什么命令可以直接跳到文件的结尾?-icode9专业技术文章分享
- 2024-10-22原生鸿蒙操作系统HarmonyOS NEXT(HarmonyOS 5)正式发布
- 2024-10-18操作系统入门教程:新手必看的基本操作指南
- 2024-10-18初学者必看:操作系统入门全攻略
- 2024-10-17操作系统入门教程:轻松掌握操作系统基础知识
- 2024-09-11Linux部署Scrapy学习:入门级指南
- 2024-09-11Linux部署Scrapy:入门级指南
- 2024-08-21【Linux】分区向左扩容的方法