IO模型
BIO/NIO/AIO区别 首先需要区分几个概念 IO分为内存IO/网络IO/磁盘IO,磁盘IO都是阻塞的 阻塞与非阻塞是通过代码来实现的,区别在于是在于发过来操作请求,数据准备好才返回(阻塞)还是直接返回(非阻塞) IO读取顺序:磁盘(磁盘IO)/网卡(网络IO)—> 内核缓冲区 —> 用户内存,重点在于后面的过程是否是需要进程阻塞等待的 IO模型 同步阻塞(blocking IO) A去钓鱼了,你一直在那等,鱼上钩了,然后把鱼钓上来(全程阻塞) 普遍使用的IO模型,linux默认的IO模型。 进程调用recvfrom一直到recvfrom返回 同步非阻塞(noblocking IO) B去钓鱼了,放好钩后,然后开始看书,刷抖音去了,过一会看看是不是鱼上钩了。然后等鱼上钩了,把鱼钓上来 这个询问其实询问的是操作系统内核,即文件描述缓冲区是否就绪,准备好了,就进行拷贝数据包的操作。没有数据报准备好时,也不阻塞程序,内核直接返回为准备就绪的信号。 但是这个轮询其实是对CPU来说是一个比较大的消耗 很少使用,因为他浪费了大量的CPU资源 进程recvfrom,如果没有准备就绪的话,直接返回EWOULDBLOCK,过段时间再次调用recvfrom,直到正常返回。这个操作其实就是epolling(轮询),epolling内核是一个很占用CPU资源的操作 但是对管道的操作