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

Web Server项目实战2-Linux上的五种IO模型

上一节内容的补充:I/O多路复用是同步的,只有调用某些API才是异步的

Unix/Linux上的五种IO模型

a.阻塞 blocking

调用者调用了某个函数,等待这个函数返回,期间什么也不做,不停地去检查这个函数有没有返回,必须等这个函数返回才能进行下一步动作。

b.非阻塞 non-blocking

非阻塞等待,每隔一段时间就去检测IO事件是否就绪,没有就绪时可以去做其他事。非阻塞IO执行系统调用时总是立即返回,不管事件是否已经发生,若事件没有发生,则返回-1,此时可以根据errno区分这两种情况,对于 accept, recv, send 这些事件未发生时,errno 通常被设置为 EAGAIN

c. IO复用 IO multiplexing

Linux用 select/poll/epoll 函数实现 IO 复用模型,这些函数也回使进程阻塞,但是和阻塞 IO 所不同的是这些函数可以同时阻塞多个 IO 操作。而且可以同时对多个读操作、写操作的 IO 函数进行检测,直到有数据可读或可写时,才真正调用 IO 操作函数。

*注意:IO 复用的目的并不是提高程序处理多个客户端的能力,单线程、单进程同时检测多个文件描述符是否可以执行 IO 操作的能力

d.信号驱动 signal-driven

Linux用套接口进行信号驱动 IO ,安装一个信号处理函数,进程继续运行并不阻塞,当 IO 事件就绪,进程收到 SIGIO 信号,然后处理 IO 事件。

在上图中,“等待数据”为阶段一,“数据从内核空间拷贝到用户空间”为阶段二。内核在阶段一是异步的,在阶段二是同步的;与非阻塞 IO 的区别在于它提供了消息通过机制,不需要用户进程不断地轮询检查,减少了系统 API  的调用次数,提高了效率。

e.异步 asynchronous

Linux中,可以调用 aio_read 函数告诉内核文件描述符缓冲区指针和大小、文件偏移量及通知的方式,然后立即返回,此时用户进程可以去做自己的事情。当内核将数据拷贝到缓冲区后,再通知应用程序。

以上五种 IO 模型,在实际应用中,最常用的是非阻塞模型 IO 复用模型。

http://www.lryc.cn/news/351789.html

相关文章:

  • Docker | 基础指令
  • 10款手机黑科技app,每款都好用到爆!
  • tomcat请求数据解析过程
  • 《扑克牌游戏》
  • kali模块及字典介绍
  • 交换排序、归并排序、计数排序
  • 怎么查看 iOS ipa包 mobileprovision 改动
  • 【Unitydemo制作】音游制作—控制器与特效
  • [程序员] 最近的感悟,错误处理占大头?
  • vue3(一) - 结构认识
  • 数据库迁移——kettle开发01
  • Netty: Netty中的组件
  • Julia编程01:Julia语言介绍
  • 二叉树顺序结构及链式结构
  • 【Python】pandas连续变量分箱
  • Qt 打卡小程序总结
  • 【qt】标准项模型
  • 一文深度剖析 ColBERT
  • css左右滚动互不影响
  • 【linux-uboot移植-mmc及tftp启动-IMX6ULL】
  • Python-温故知新
  • 绿联NAS DXP系列发布:内网穿透技术在私有云的应用分析
  • 力扣:242. 有效的字母异位词
  • 设计模式14——组合模式
  • MyBatis面试题(Mybaits的优点、缺点、适用场合、与Hibernate有哪些不同)
  • python写接口性能测试
  • 《暮色将尽》跨越世纪的历程,慢慢走向并完善自我
  • python-鸡兔同笼问题:已知鸡和兔的总头数与总脚数。求笼中鸡和兔各几只?
  • 【NumPy】关于numpy.transpose()函数,看这一篇文章就够了
  • 什么是住宅IP代理?为什么需要家庭 IP 代理