I/O模型:

I/O操作需要内核系统调用来完成,系统调用需要CPU来调度,而CPU的访问速度相对于I/O

来说比较快,所以Cpu不得不浪费CPU时间来等待慢速I/O操作

通过多进程方式来充分利用CPU资源,当还是希望让cpu花费少的时间在I/0操作的调度上,

这样就可以有很多的CPU来完成I/O操作

     I/O操作主要是通过网络数据的接受和发送,以及磁盘文件的访问,归纳为多种模型

称为I/0模型,本质在于CPU的参与方式.

PIO和DMA

       慢速I/O设备和内存之间传输方式

       PIO:磁盘和内存之间的数据传输需要CPU控制,读取磁盘文件到内存的时候,数据

需要经过CPU存储转发.

       DMA:可以不经过CPU而直接可以进行磁盘和内存的数据交换,DMA模式下,CPU只要向

DMA控制器下达指令,让DMA控制器来处理数据的传输即可,DMA控制器通过系统总线来传输数据,

传输完毕后再通知CPU,这样减少了CPU占有率.


   一. 同步阻塞I/O

       I/O等待例子: 比如web服务器等待用户请求,比如服务器与浏览器建立TCP链接后,需要等待

用户发送HTTP请求.

       I/0等待不可避免,有等待就会有阻塞.阻塞指的是当前发起I/O操作的进程被阻塞,并不是CPU

被阻塞,实际上没有什么能让CPU阻塞,它只知道干活.

        同步阻塞I/O指当前进程I/O操作的系统调用或者库函数时候,比如accept,send,recv等,进程便

暂停,等待I/O操作完成后再继续运行,这样的I/O模型可以和多进程结合有效利用CPU资源


    二.同步非阻塞I/O:


    三.I/O复用(select和poll);

用户发送HTTP请求.

       I/0等待不可避免,有等待就会有阻塞.阻塞指的是当前发起I/O操作的进程被阻塞,并不是CPU

被阻塞,实际上没有什么能让CPU阻塞,它只知道干活.

        同步阻塞I/O指当前进程I/O操作的系统调用或者库函数时候,比如accept,send,recv等,进程便

暂停,等待I/O操作完成后再继续运行,这样的I/O模型可以和多进程结合有效利用CPU资源


    二.同步非阻塞I/O:

          在同步阻塞I/O中,进程实际上等待的时间包挂二部分,一个是等待数据的就绪,另外一个是等待数据的复制.对于网络I/O来说,前者的时间可能更长.

         同步非阻塞I/O的调用不会等待数据的就绪,如果数据不可读写,则立即告诉进程.这种非阻塞I/O结合反复轮询查看数据是

否就绪,花费大量CPU时间,非阻塞I/O一般只针对网络I/O有效,对于磁盘I/O非阻塞I/O不产生效果


    三.I/O复用(select和poll);

       I/O复用模型会用到select或者poll函数,这两个函数也会使进程阻塞,但是和阻塞I/O所不同的,这两个函数可以同时阻塞多

个I/O操作.而且可以同时对多个读操作,多个写操作的I/O函数进行检测.直到有数据可读或可写时,才真正调用I/O操作函数


     四.事情驱动I/O

         首先我们允许套接口进行事件驱动I/O,并安装一个信号处理函数,进程继续运行并不阻塞.当数据准备好时,进程会收到一

个SIGIO信号,可以在信号处理函数中调用I/O操作处理数据.

      五.异步I/O

        当一个异步过程调用发出后,调用者不能立刻得到结果.实际处理这个调用的部件在完成后,通过状态.通知和回调来通知调

用者的输入输出操作