5

Linux网络IO模型

clipboard.png


阻塞IO模型

clipboard.png

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

非阻塞IO模型

clipboard.png

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


IO复用模型

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

clipboard.png

特点:

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

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


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

clipboard.png


异步IO模型

clipboard.png

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


五种IO模型的比较:

clipboard.png

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

参考书籍:《UNIX网络编程
推荐阅读这本书,看了一会觉得很不错,对学习后面应用层的东西有很大的帮助


y猪
246 声望25 粉丝