专栏名称: CPP开发者
伯乐在线旗下账号,「CPP开发者」专注分享 C/C++ 开发相关的技术文章和工具资源。
今天看啥  ›  专栏  ›  CPP开发者

一顿饭的事儿,搞懂 Linux 5 种 IO 模型

CPP开发者  · 公众号  · 互联网安全 科技自媒体  · 2024-06-20 08:57
    

主要观点总结

本文将Linux中的五种IO模型(阻塞IO、非阻塞IO、多路复用IO、信号驱动式IO和异步IO)与吃饭的场景进行类比,以便更好地理解和区分这些IO模型。

关键观点总结

关键观点1: 阻塞IO(Blocking I/O)

当发起IO操作时,如果数据未准备好,进程会被挂起,直到数据准备好并复制到位。类似于在餐厅等待厨师制作食物的过程。

关键观点2: 非阻塞IO(Non-Blocking I/O)

在调用IO操作时,即使数据未准备好,也不会阻塞进程,进程可以继续执行其他任务。类似于在快餐店等待食物的过程中可以玩手机。

关键观点3: 多路复用IO(I/O Multiplexing)

一个进程可以同时监控多个文件描述符的状态变化,当某个文件描述符就绪时,进行数据传输。类似于在自助餐选择多个餐区的食物,可以并行处理多个任务。

关键观点4: 信号驱动式IO(Signal-Driven I/O)

进程告诉内核数据准备好时发送信号,进程继续执行其他任务,收到信号后进行数据传输。类似于在外带餐厅等待食物,服务员通知取餐。

关键观点5: 异步IO(Asynchronous I/O)

发起IO操作后,系统立即返回,数据传输在后台进行,完成后通知进程。类似于在线点餐后,可以执行其他任务,等待送餐。


文章预览

Linux里有五种IO模型: 阻塞IO 、 非阻塞IO 、 多路复用IO 、 信号驱动式IO 和 异步IO ,我发现这五种IO模型,其实能和吃饭这件事关联起来。 阻塞IO(Blocking I/O) 阻塞IO是最常见的IO模型。 当发起一个IO操作时,比如读取数据,系统会调用read()函数。如果请求的数据没有准备好,此时进程会被挂起(blocked),进入等待状态。直到数据准备好,而且复制到应用进程的缓冲区,这时候才会返回。 从调用到返回,整个时间段都是阻塞的,所以被称为阻塞IO。 阻塞IO 就像是手机没电的时候,去饭馆吃饭,我点完菜,只能等着厨师做好,服务员端上来,我才能愉快干饭。这段时间,我就只能坐在座位上干等。 非阻塞IO(Non-Blocking I/O) 阻塞IO,还是比较浪费资源的,那么非阻塞IO就来了。 所谓非阻塞IO,是在调用IO操作时,如果缓冲区没有数据的话,直接返 ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览