首页 > 其他分享 >IO模型和常见的异步IO应用场景

IO模型和常见的异步IO应用场景

时间:2024-04-12 19:22:05浏览次数:21  
标签:异步 场景 函数 阻塞 调用 线程 IO

常见的IO模型

1.同步

就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。等前一件做完了才能做下一件事情。就是我调用一个功能,该功能没有结束前,

我死等结果。

2.异步

当一个异步过程调用发出后,调用者不能立刻得到结果。实际上处理这个调用的部件在完成之后,通过状态,通知和回调来通知调用者。就是我调用

一个功能,不需要知道该功能结果,该功能就有结果后通知我。

3.阻塞

阻塞调用是指调用结果返回之前,当前线程会被挂起(线程进入非可执行状态,在这个状态下,CPU不会给线程分配时间片,即线程暂停运行。)

函数只有在得到结果之后才会返回。对于同步调用来说,很多时候当前线程还是激活的,只是从逻辑上当前函数没有返回而已。就是调用函数,函数没有接受完数据或者没有得到结果之前,函数不会返回。

4.非阻塞

指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。就是调用函数,函数会立即返回,通过select通知调用者。

 

异步IO的应用场景

1.阻塞I/O

应用程序调用一个IO函数,导致应用程序阻塞,等待数据准备好。如果数据没有准备好,一直等待。数据准备好,从内核拷贝到用户空间,IO函数返回成功指示。

2.非阻塞I/O

我们把一个socket接口设置为非阻塞就是告诉内核,当所请求的I/O操作无法完成时,不要将进程睡眠,而是返回一个错误。这样我们的I/O操作函数将不断地测试数据是否已经准备好,如果没有准备好,继续测试,直到数据准备好为止。在这个不断测试的过程中,会大量的占用CPU的时间。

3.I/O复用

I/O复用模型会用到select,poll,epoll函数,这几个函数也会使进程阻塞,但是和阻塞I/O所不同的,这三个函数可以同时阻塞多个I/O操作。而且可以同时对多个读操作,多个写操作的I/O函数进行检测,直到有数据可读或者可写时,才真正调用I/O操作函数。

4.信号驱动I/O

我们允许套接口进行信号驱动I/O,并安装一个信号处理函数,进程继续运行并不阻塞。当数据准备好时,进程会收到一个SIGIO信号,可以在信号处理函数中

调用I/O操作函数处理数据。

5. 异步I/O

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

 

标签:异步,场景,函数,阻塞,调用,线程,IO
From: https://www.cnblogs.com/huwy-123/p/18131964

相关文章

  • Python程序员Visual Studio Code指南5调试
    5调试当运行程序时终端输出错误时,可以参考编辑器中的"问题"面板来解决遇到的问题。不过,并非所有错误都会导致错误。可能出现的情况是,程序执行成功,但输出结果与预期不同。出现这种情况时,下一步就是找出程序中的错误。这个过程被称为调试。您可以尝试通过注释代码行(从而禁止代码......
  • 使用 flash_download_tool 下载 Vscode PlatformIO 开发 ESP32 的 bin 文件
    一言蔽之:先使用PlatformIO的命令找到PlatformIO是怎么烧录的,然后照葫芦画瓢即可。前提,VScode已经能够烧录固件了,使用PlatformIO打开所需的项目。打开VScode终端执行:piorun-v-tupload执行了之后,PlatformIO就开始编译固件并上传了,找到关键性的东西<lambda>(["up......
  • 4. 会话机制 Cookie和Session
    4.1会话机制一次会话指的是:就好比打电话,A给B打电话,接通之后,会话开始,直到挂断电话,该次会话就结束了,而浏览器访问服务器,就跟打电话一样,浏览器A给服务器发送请求,访问web程序,该次会话就已经接通,其中不管浏览器发送多少请求(就相当于接通电话后说话一样),都视为一次会话,直到浏览器关闭......
  • node笔记1:vue+node+mongodb+studio 3T创建登录模块
    1.创建node项目:expressnodenpmipackage.json修改如下代码,便于每次修改代码都可以刷新页面:"scripts":{"start":"node-dev./bin/www"}2.如果配合node设置反向代理;3.添加mongoose模块提供数据库信息:npmimongoose--save4.以登录功能模块为例,项目文件如下:model......
  • Godot UI线程,Task异步和消息弹窗通知
    目录前言线程安全全局消息IOC注入消息窗口搭建最简单的消息提示简单使用仿ElementUIElementUI效果简单的Label样式如何快速加载多个相同节点修改一下,IOC按钮事件注册总结前言最近我在研究Godot的全局消息,然后发现Godot也是有UI线程限制的,只能在主线程的子线程里面修改UI。线......
  • bug记录:java.lang.UnsupportedOperationException: null
    java.lang.UnsupportedOperationException:null这个错一般是因为不支持的操作导致,即对象不支持某方法,显示抛出此异常。举个例子:Arrays.asList这个方法返回Arrays内部类ArrayList而不是java.util.ArrayList,而Arrays的内部类ArrayList是继承了AbstractList,AbstractList中的add、r......
  • 枚举Enumeration
    枚举它的对象(具体值)是固定的时(如:性别、季节等)不会更多,普通类不能体现它们是固定的若干个对象。枚举(enumeration,简写enum)是一组常量的集合;可以理解为特殊的类,里面仅包含一组有限的特定对象。自定义实现枚举构造器私有化,防止直接实例化对象去掉set方法,防止属性被修改;保证对象......
  • IDEA突然提示git is not installed Cannot identify version of git executable:no re
    闲话:早上来打开IDEA编辑器,突然发现Git消失了,下意识点了一下安装git,等了一会发现安装失败!好嘛,大早上的事来了。随后调整了一个上午,最后实在忍不住起来上厕所,烦躁的不行把笔记本关机重启,回来发现居然自己恢复了。现在我把我查询的过程都记录下来,希望能有帮助到......
  • VS studio上查看标准cout输出
    VSstudio上查看标准cout输出网上的方法在解决方案管理器中,单击选中项目后,点击菜单【视图】->【属性页】在生成事件->生成后事件->命令行(BuildEvents->Post-BuildEvent->Command)Line)中增加$(OutDir)$(ProjectName).exe顾名思义,这个方法是在生成结束后,使用命令行执行生成的......
  • VS studio 上开发Qt——Qt VS studio Tool的使用
    1.VS上安装Qt扩展点击菜单栏【扩展】->【管理扩展】,在搜索框搜索“Qt”,点击下载QtVisualStudioTools,以2022版为例,需要关闭所有窗口才能执行安装关闭VS后,弹出安装窗口,等待其安装完成2.新建QT工程测试等待安装完成后,添加一个QtVertion后(前提已经安装了Qt开发环境)即可......