前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >浅析IO模型

浅析IO模型

作者头像
沁溪源
发布2020-09-03 14:27:57
3060
发布2020-09-03 14:27:57
举报
文章被收录于专栏:沁溪源沁溪源

目录

  • 概念
  • IO模型
    • 同步阻塞IO
    • 同步非阻塞IO
    • 多路复用IO
    • 信号驱动IO
    • 异步非阻塞IO

概念

谈论模型之前,先了解一下相关的概念知识,扩展一下深度。

  • IO如何交互呢? 对于一个应用程序即一个操作系统进程来说,它既有内核空间(与其他进程共享),也有用户空间(进程私有),它们都是处于虚拟地址空间中。用户进程是无法访问内核空间的,它只能访问用户空间,通过用户空间去内核空间复制数据,然后进行处理。 日常用户进程获取数据,IO主要分为两个阶段:
  1. 从磁盘空间到内核空间;
  2. 从内核空间到用户空间;
在这里插入图片描述
在这里插入图片描述

IO模型

同步阻塞IO

  • 概念:用户进程一旦发送请求,就一直处于等待状态,直至有数据返回。
  • 场景:商场试衣间,如果此时试衣间里存在顾客试衣服,那么你只能选择一直在门外等着,直到他开门结束。
  • 请求过程:
在这里插入图片描述
在这里插入图片描述

同步非阻塞IO

  • 概念:用户进程一旦发送请求,只要数据没有返回,就会间隔时间发送请求,直到有数据返回结束。
  • 场景:商场试衣间有人试衣服,你就间隔一段时间过来看看试衣间是否有人,直到他出来为止。
  • 请求过程:
在这里插入图片描述
在这里插入图片描述

多路复用IO

  • 概念:多路指多个TCP连接(即socket或者channel),复用指复用一个或几个线程。意思说一个或一组线程处理多个连接;
  • 场景:餐厅点餐时,取餐处会是存在一个屏幕,显示点餐号,工作人员根据上面的点餐号备餐,所有请求都交个该屏幕处理;
  • 请求过程:
在这里插入图片描述
在这里插入图片描述

信号驱动IO

  • 概念: 当用户线程发起一个IO请求操作,会给对应的socket注册一个信号函数,然后用户线程会继续执行,当内核数据就绪时会发送一个信号给用户线程,用户线程接收到信号之后,便在信号函数中调用IO读写操作来进行实际的IO请求操作。
  • 场景:餐厅点餐时,取餐处会是存在一个屏幕,显示以备好餐的取餐号并提示对应顾客前去取餐;工作人员备餐期间,顾客可以根据自己的意愿做其余事情。
  • 请求过程:
在这里插入图片描述
在这里插入图片描述

异步非阻塞IO

  • 概念:用户进程进行aio_read系统调用之后,无论内核数据是否准备好,都会直接返回给用户进程,然后用户态进程可以去做别的事情。等到socket数据准备好了,内核直接复制数据给进程,然后从内核向进程发送通知。IO两个阶段,进程都是非阻塞的。
  • 场景:项目组长安排好开发任务并安排下去,开发人员完成任务回复,自己不用关心如何设计实现的产品需求;
  • 请求过程:
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-05-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
  • 概念
  • IO模型
    • 同步阻塞IO
      • 同步非阻塞IO
        • 多路复用IO
          • 信号驱动IO
            • 异步非阻塞IO
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档