同步IO与异步IO/阻塞IO与非阻塞IO/reactor和proactor/IO过程中的拷贝

同步IO与异步IO的区别

  • 同步就是在一个功能调用时,可以阻塞也可以非阻塞等待,等待事件返回后进行事件的读写处理
  • 异步就是用户调用发出后,系统立刻返回,实际处理这个事件读写(内核空间和用户空间交互)的函数由操作系统内核完成。在完成后,通过状态、通知和回调来通知用户。因此需要操作系统支持windows(IOCP)/linux(AIO)

信号驱动IO与异步IO的区别

  • 信号驱动IO:通过调用sigaction注册信号函数,等内核数据准备好的时候系统中断当前程序,执行信号函数(在这里面调用recv)。但是本质也是同步IO
    在这里插入图片描述

  • 异步IO,会由 内核执行读写,并复制到指定的用户空间
    在这里插入图片描述

阻塞IO

在这里插入图片描述

非阻塞IO

在这里插入图片描述

IO多路复用

  • 本质也是同步IO。并且会阻塞于select/epoll,这2个系统调用都可以在内核准备好数据(网络数据到达内核)时告知用户进程,这个时候再调用recv一定是有数据的,不会阻塞在读写上。因此也能成为同步非阻塞IO
    在这里插入图片描述

几大IO的区别

在这里插入图片描述

Reactor和Proactor

  • Reactor:非阻塞同步网络模型,可以理解为:来了事件我通知你,你来处理
    在这里插入图片描述

  • Proactor:异步网络模型,可以理解为:来了事件我来处理,处理完了我通知你。
    在这里插入图片描述

IO过程中的拷贝

  • 读写的4次拷贝
    在这里插入图片描述
  • mmap减少一次拷贝
    在这里插入图片描述
  • sendfile系统调用:直接再内核空间内复制数据,减少一次mmap
    在这里插入图片描述
  • DMA辅助的sendfile,省去了kerner 缓存到socket缓存的复制
    在这里插入图片描述
  • 更新 在这里插入图片描述

参考链接:
https://www.cnblogs.com/felixzh/p/10345929.html
https://blog.csdn.net/bandaoyu/article/details/90694602
https://www.cnblogs.com/wxxjianchi/p/13581356.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值