高级IO:五种IO模型
五种IO模型: 一.在总结五种IO模型之前我们了解一下什么是IO??? I表示input,O表示output,合在一起就是IO―表示输入输出设备;每个设备都有一个专用的IO地址,用来处理自己的输入输出信息; 需要注意:IO地址绝对不能有重复,如果两个IO地址有冲突则会造成系统硬件不能正常工作; 二. IO模型: 对于一次IO访问(以read举例),数据会先被拷贝到操作系统内核的缓冲区中, 然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间。 所以说,当一个read操作发生时,它会经历两个阶段: (1) 等待数据准备 (2)将数据从内核拷贝到进程中 在网络编程环境中,一次IO操作主要包括两个部分: 等数据准备 拷贝数据 所以如果想要提高IO效率,就应该想办法让等的比重减少。 Linux下常见五种IO模型分类: 三.五种IO模型及基本概念: 1.阻塞IO: 在内核将数据准备好之前, 系统调用会一直等,所有的套接字, 默认都是阻塞方式; 具体的过程: (1)当用户进程调用了recvfrom这个系统调用,kernel就开始了IO的第一个阶段: 准备数据(对于网络IO来说,很多时候数据在一开始还没有到达;比如,还没有收到一个完整的UDP包。这个时候kernel就要等待足够的数据到来);这个过程需要等待,也就是说数据被拷贝到操作系统内核的缓冲区中是需要一个过程的;而在用户进程这边