Linux网络IO模型

Linux网络IO模型

clipboard.png


阻塞IO模型

clipboard.png

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

非阻塞IO模型

clipboard.png

通常不多用这个非阻塞模型,由于反复调用消耗CPUlinux


IO复用模型

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

clipboard.png

特色:网络

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

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


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

clipboard.png


异步IO模型

clipboard.png

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


五种IO模型的比较:函数

clipboard.png

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

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

相关文章
相关标签/搜索