websevere服务器从零搭建到上线(二)|Linux上的五种IO模型

文章目录

  • [阻塞 blocking](#阻塞 blocking)
  • [非阻塞 non-blocking](#非阻塞 non-blocking)
  • [IO复用 IO multiplexing](#IO复用 IO multiplexing)
  • [信号驱动 signal-driven](#信号驱动 signal-driven)
  • [异步 asynchronous](#异步 asynchronous)
  • 拓展知识

看过上篇文章英国基本能理解本文五张图的内容websevere服务器从零搭建到上线(一)|阻塞、非阻塞、同步、异步

本文要能够在纸上默写并且阐明工作原理,八股就到位了

阻塞 blocking

非阻塞 non-blocking

非阻塞IO真的好吗,既然数据没有准备好,我们还要把宝贵的CPU资源浪费在不断询问内核是否准备好数据,这是没有必要的,所以这里我们应该写成事件驱动型的非阻塞IO,即非阻塞IO与IO多路复用一起使用

所以当我们谈到non-blocking,一般都是说的non-blocking + IO-multiplexing,单用其中任何一个都没有办法很好的实现功能

IO复用 IO multiplexing

IO多路复用默认的是一个阻塞的sockfd,一个select\poll\epoll会同时监听多个套接字,如果工作在阻塞模式下,如果某个socketfd读缓冲区就绪,我们就会阻塞在这里一直读,我们一直阻塞在某一个socketfd上后,一直没有机会再回到epoll_wait取监听别的套接字了,所以事件驱动的no-blocking IO+IO multiplexing才是正解!

信号驱动 signal-driven

内核在第一个阶段是异步,在第二个阶段是同步;与非阻塞IO的区别在于它提供了消息通知机制,不需 要用户进程不断的轮询检查,减少了系统API的调用次数,提高了效率。

异步 asynchronous

拓展知识

关于异步非阻塞模型:

在网络模型中,异步非阻塞是一种处理I/O操作的方式。异步指的是程序在执行I/O操作时可以同时进行其他任务,而不必等待I/O操作完成。

在异步非阻塞模型中,通常会使用事件驱动的方式来管理I/O操作。当一个I/O操作完成时,系统会通知程序,程序可以在合适的时机处理这个事件。这种模型通常会配合使用回调函数或者事件循环来处理I/O事件,从而实现高效的并发处理。

关于异步阻塞模型

异步通常与非阻塞相对应。但是,有时候在特定的场景中,"异步" 用来表示操作可以在后台进行,而 "阻塞" 则表示操作需要等待直到完成。
在某些情况下,异步操作可能是阻塞的,这意味着虽然操作在后台(操作系统)执行,但程序仍然需要等待其完成才能继续执行其他任务。这通常发生在某些异步操作的结果对程序的后续执行是必需的情况下,程序会在启动异步操作后被阻塞直到操作完成。

例如,在异步文件读取的情况下,虽然读取操作是异步的(即文件读取在后台进行),但程序可能需要等待读取操作完成并且数据可用才能继续执行后续操作。在这种情况下,虽然操作是异步的,但程序仍然会被阻塞,直到异步操作完成。

相关推荐
云 无 心 以 出 岫5 分钟前
贪心算法QwQ
数据结构·c++·算法·贪心算法
zhu128930355610 分钟前
网络安全的重要性与防护措施
网络·安全·web安全
换一颗红豆28 分钟前
【C++ 多态】—— 礼器九鼎,釉下乾坤,多态中的 “风水寻龙诀“
c++
网络研究院34 分钟前
ChatGPT 的新图像生成器非常擅长伪造收据
网络·人工智能·安全·chatgpt·风险·技术·欺诈
随便昵称1 小时前
蓝桥杯专项复习——前缀和和差分
c++·算法·前缀和·蓝桥杯
commonbelive1 小时前
团体程序设计天梯赛——L1-100 四项全能
c++
genispan1 小时前
QT/C++ 多线程并发下载实践
开发语言·c++·qt
小吃饱了1 小时前
TCP可靠性传输
网络·网络协议·tcp/ip
写代码的小王吧2 小时前
【Java可执行命令】(十)JAR文件签名工具 jarsigner:通过数字签名及验证保证代码信任与安全,深入解析 Java的 jarsigner命令~
java·开发语言·网络·安全·web安全·网络安全·jar
孪生质数-2 小时前
SQL server 2022和SSMS的使用案例1
网络·数据库·后端·科技·架构