Linux网络IO模型

36次阅读

共计 541 个字符,预计需要花费 2 分钟才能阅读完成。

Linux 网络 IO 模型


阻塞 IO 模型

  • 1. 当应用程序发起网络 IO 的请求时会调用操作系统 recvfrom 函数
  • 2. 等待系统内核准备数据报 (获取网络数据: 网卡把数据拷贝到内核)
  • 3. 数据报准备好后将数据从内核拷贝到用户空间,即应用程序空间

非阻塞 IO 模型

一般很少用这个非阻塞模型,因为反复调用消耗 CPU


IO 复用模型

IO 复用模型是 linux 下用的最多的, 也就是 JDK 中的 NIO

特点:

  • 对于某一个应用进程而言,或者说在某一次网络通信, 它还是阻塞的, 但是可以同时服务于多个网络通信。
  • 多个 select 函数即多个 socket 请求,会挂在内核中, 操作系统会轮询检查数据报是否准备好再返回可读条件即就绪, 应用程序再发起 recefrom 函数拷贝内核中的数据.

select 和 epoll;对一个 socket,两次调用,两次返回,比阻塞 IO 并没有什么优越性;
关键是能实现同时对多个 socket 进行处理。


信号驱动 IO—(相对少用)


异步 IO 模型

当一个异步过程调用发出后,系统直接返回, 调用者不能立刻得到结果。
实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者的输入输出操作。


五种 IO 模型的比较:

除异步 IO 模型,前面四种 IO 模型第二阶段都是相同的,阻塞于 recefrom 调用。

参考书籍:《UNIX 网络编程

正文完
 0