浅谈IO
IO读写的基本原理 程序进行IO读写依赖于操作系统底层的IO读写,主要为read&write两大系统调用。应用程序无论是调用操作系统的read还是write,都会涉及到缓冲区。具体来说,调用操作系统的read,是把数据从内核缓冲区复制到进程缓冲区 ;而write调用,是把数据从进程缓冲区复制到内核缓冲区。(上层程序的io操作,实际上并没有物理设备级别的读写,而是缓存的复制。这项底层的读写交换,是由操作系统内核(Kernel)来完成的) 主要四种方式的IO模型 同步阻塞IO(BIO) 阻塞IO指的是内核IO操作彻底完完成后,才返回用户空间执行用户的操作。阻塞指的是用户空间程序的执行状态 阻塞期间用户线程一直在等待,基本不会占用CPU资源。 同步非阻塞IO(NIO) 用户空间的程序不需要等待内核IO操作彻底完成,可以立即返回用户空间执行用户的操作。内核会立即返回给用户一个状态值。 应用程序的线程需要不断地进行IO系统调用,轮询数据是否已经准备好,如果没有准备好,就继续轮询,直到完成IO系统调用为止 在NIO模型中,应用程序一旦开始IO系统调用,会出现以下两种情况 1. 在内核缓冲区中没有数据的情况下,系统调用会立即返回,返回一个调用失败的信息。 2. 在内核缓冲区中有数据的情况下,是阻塞的,直到数据从内核缓冲复制到用户进程缓冲。复制完成后,系统调用返回成功