2020-12-30

网络I/O模型

1.网络IO的概念:

  本质就杀socket的读取,socket在linux系统被抽象为流,I/O可以理解为对流的操作,实际就是读取对端(另外一个网络节点服务器)通过网络传过来的二进制流

2.网络IO模型分类:

同步模型

阻塞IO

非阻塞IO

多路复用IO

信号驱动式IO

异步IO

3.网络IO的两个阶段:

(1)等待数据准备(数据由对端传输到内核(TCP/IP协议栈在内核)的缓存区)

  (2) 数据由内核缓存区复制到用户进程缓存区

 

4.各种类型IO模型概述

(1)阻塞I/O(bloking I/O):进程向内核发起网络IO请求(recvfrom 系统调用),该进程就阻塞了,让出CPU使用权(无法做计算处理,更无法发起下一次网络IO请求)。直到内核把数据准备好,并起拷贝

         到用户进程。

    2016627164407309.jpg (686×379)

  (2)非阻塞IO(non-bloking I/O)

在网络I/O时候,非阻塞I/O也会进行recvform系统调用,检查数据是否准备好,与阻塞I/O不一样,"非阻塞将大的整片时间的阻塞分成N多的小的阻塞, 所以进程不断地有机会 '被' CPU光顾"。

也就是说非阻塞的recvform系统调用调用之后,进程并没有被阻塞,内核马上返回给进程,如果数据还没准备好,此时会返回一个error。进程在返回之后,可以干点别的事情,然后再发起recvform系统调用。重复上面的过程,循环往复的进行recvform系统调用。这个过程通常被称之为轮询。轮询检查内核数据,直到数据准备好,再拷贝数据到进程,进行数据处理。需要注意,拷贝数据整个过程,进程仍然是属于阻塞的状态。

2016627164443436.jpg (780×410)

 

  

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值