Advertisement

I/O 多路复用底层原理第一部分:五种I/O模型 _

阅读量:

为了深入理解I/O多路复用机制及其存在的弊端,并且以刨根问底的精神,在这里我们先回顾了Unix网络编程中的五种IO模型。

  • 阻塞式输入输出 - Blocking IO
  • 非阻塞式输入输出 - NoneBlocking IO
  • IO多路复用 - IO多路复用
  • 基于信号驱动的输入输出 - signal driven IO
  • 异步输入输出 - asynchronous IO

Unix网络编程中的五种IO模型

阻塞IO - Blocking IO

最传统的一种IO模型,即在读写数据过程中会发生阻塞现象。

一旦用户线程发起一个IO请求之后,随后内核检查数据是否已就绪.如果此时系统未准备好,则内核将暂时等待直至数据准备好.这使得该用户的主线程进入阻塞状态.等到数据传输完毕后,主程序将从内存中复制所需的数据并返回处理结果,从而释放CPU资源.

可能有些人会认为采用多线 thread 加上阻塞 IO 是提高效率的一种常用方法。
然而,在这种架构中,默认情况下每个 socket 会绑定到一个线程上。
这会导致大量的资源被占用。
尤其是当存在长时间保持连接的状态时,
这种配置可能导致后续会有大量新连接请求到来的情况下,
性能出现瓶颈。

非阻塞IO - NoneBlocking

全部评论 (0)

还没有任何评论哟~