一、分类 在UNIX或Liunx下主要有4中IO模型 阻塞IO:最简单、最常用、效率最低 阻塞IO简介和代码示例-CSDN博客当进程执行读操作的时候,如果缓冲区有内容,则继续读取内容向下执行。缓冲区没内容,进程进入休眠态,直到缓冲区中再次有内容,由内核唤醒进程,读取缓冲区的内容,然后继续向下执行。:如果管道写满了,进程阻塞,等待有足够的空间容纳本次的写操作了,写操作继续执行,但大多数情况下,我们只关心读阻塞的问题。缺省情况下,套接字建立后的模式就是阻塞I/O模式。IO模型,大部分程序使用的都为阻塞IO模型。https://blog.csdn.net/CSDN_DU666666/article/details/139598764?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22139598764%22%2C%22source%22%3A%22CSDN_DU666666%22%7D 非阻塞IO:可防止进程阻塞在IO操作上,需要轮询 非阻塞IO简介和代码实例-CSDN博客recv和recvfrom的MSG_DONTWAIT O_NONBLOCK。以读操作为例,当进程执行读操作的时候,如果缓冲区内有内容,则读取内容继续执行。但对于大部分的函数并没有非阻塞标志位,可以使用fcntl函数设置非阻塞标志位。如果缓冲区没有内容,则立即返回一个错误,而非让进程进入休眠状态。eg: waitpid的WHOHANG。有些函数本身自带非阻塞标志位。https://blog.csdn.net/CSDN_DU666666/article/details/139637764?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22139637764%22%2C%22source%22%3A%22CSDN_DU666666%22%7D IO多路复用:允许同时对多个IO进行控制 IO多路复用简介和代码实例(select函数)-CSDN博客IO多路复用简介和代码实例(select函数)https://blog.csdn.net/CSDN_DU666666/article/details/139663884?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22139663884%22%2C%22source%22%3A%22CSDN_DU666666%22%7D 信号驱动IO:一种异步通信模型