五种I/O模型: 安全
1)阻塞I/O
2)非阻塞I/O
3)I/O复用(select和poll)
4)信号驱动I/O(SIGIO)
5)异步I/O
前四中是同步,最后一种是异步。异步
阻塞I/O模型:
简介:进程会一直阻塞,直到数据拷贝完成
应用程序调用一个I/O函数,致使应用程序阻塞,等待数据准备好,若是数据没有准备好,一直等待。。数据准备好,从内核拷贝到用户空间,I/O函数返回成功函数
非阻塞I/O模型:
简介:咱们把一个套接口设置为非阻塞就是告诉内存,当所请求的I/O操做没法完成时,不要惊进程睡眠,而是返回一个错误,I/O函数会不断的测试数据是否准备好,没有准备好,继续测试,直到数据准备好为止。在测试的过程当中会占用大量的CPU时间。 测试
I/O复用模型:
简介:主要是select和epoll;对于一个I/O端口,两次调用,两次返回,比阻塞I/O并无什么优点,只是能实现同时对多个I/O端口进行监听。线程
I/O复用模型会调用select,poll函数,这几个函数也会使进程阻塞,可是和阻塞I/O不一样的,这个函数能够同时阻塞多个I/O操做,并且能够同时对多个读操做,多个写操做的I/O函数进行检测,直到有数据可读或可写时,才真正调用I/O操做函数。
附:接口
select:不是线程安全的;select 只能监视1024个连接进程
poll :去掉了1024个连接的限制;poll仍然不是线程安全的内存
信号驱动I/O
简介:两次调用,两次返回
首先容许套接口进行信号驱动I/O,并安装一个信号处理函数,进程继续运行并不阻塞。等数据准备好时,进程会收到一个SIGIO信号,能够在信号处理函数中调用I/O操做函数处理数据。同步
异步I/O模型:
简介:数据拷贝的时候进程无需阻塞
当一个异步过程调用发出后,调用者不能马上获得结果。实际处理这个调用的部件在完成后,经过状态,通知和回调通知调用者输入输出操做。 import