主要观点总结
本文将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操作时,如果缓冲区没有数据的话,直接返
………………………………