5 种 IO 模型学习笔记

本贴最后更新于 1327 天前,其中的信息可能已经渤澥桑田

背景

linux 下的 5 种 IO 模型

5 种 IO 模型

阻塞式 IO

阻塞式 IO 是最容易理解的 IO 模型,分为两个阶段:

  1. 等待数据准备好
  2. 将数据从内核复制到用户空间

伪代码如下:

fd = connnect()
write(fd) // 这里是阻塞执行的. 
read(fd)
close(fd)

非阻塞式 IO

非阻塞式 IO 是一个轮询的过程.

每次执行 recvfrom 操作,来询问内核数据是否准备好。从 recvfrom 的返回值可知:

准备好了,则拷贝数据,然后返回成功。

否则没有数据好,则直接返回未准备好,等待下一次的轮询。

IO 多路复用模型

IO 复用模型也是阻塞式的 IO,但是是阻塞在 select, epoll 这样的系统调用上,可以同时对多个 fd 进行监听,效率比阻塞在 recvfrom 操作上的阻塞 IO 模型高。

信号驱动 IO 模型

应用告诉内核,数据准备好时,发送 SIGIO 信号,回调应用对应的信号处理程序。

用的很少。

异步 IO 模型

应用告诉内核,数据拷贝完成后,回调应用的信号处理程序。

小结

常见实现 对应的模型
select IO 多路复用模型
iocp 异步 IO 模型
java nio IO 多路复用模型
kqueue/epoll IO 多路复用模型

来源

  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    849 引用 • 919 回帖 • 184 关注
  • React

    React 是 Facebook 开源的一个用于构建 UI 的 JavaScript 库。

    180 引用 • 278 回帖 • 533 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...