首页 > 其他分享 >IO模型

IO模型

时间:2023-08-01 18:00:10浏览次数:28  
标签:返回 异步 调用 函数 模型 阻塞 同步 IO

1.同步和异步

同步和异步指的是两个函数之间的关系

同步:A调用B,A必须得到B返回的结果才能干其它事。

异步:A调用B,同时提供给B一个函数,即回调函数,此时A没有得到任何结果继续执行,B在执行完成后,调用A提供的函数告知A。

定义:和同步相对,发出异步调用后,调用者在没有得到结果之前,就可以继续执行后续操作。调用完成后,一般通过状态、通知和回调来通知调用者。对于异步调用,调用的返回并不受调用者控制。

以回调函数为例,A调用B让他读取文件,同时提供给B一个函数,告诉B操作执行完成后,调用这个函数

同步异步的区别:请求发出后,是否要等待结果才能继续执行

2.阻塞和非阻塞

阻塞和非阻塞指的是一个函数自身的状态

阻塞:A调用B,B需要一会才能返回结果,A决定得到B返回的结果再干其它事。这是阻塞

非阻塞:A调用B,B开始执行并返回,但是没有返回结果,A继续做其他事,过一会再来取B的结果。这是非阻塞

个人觉得同步异步,阻塞非阻塞并不是组合使用的关系,因为它们描述的不是一个对象。不要混用,或者使用时说清楚,谁跟谁同/异步,谁阻塞/非阻塞

比如网络中的读取数据

bool getReply = false;
string msg;
a.litenAndAccept(b);
while(!getReply)
{
  if(a.recv(b, NonBlock) > 0)
  {
    msg = b.reply();
    getReply = true;
    continue;
  }
  sleep(1)
}

这里,a尝试读取b的缓冲区,使用NonBlock,如果没有数据,就立刻返回,所有a是非阻塞的,但是a和b之间的关系还是同步,因为a一直要等到b的结果,才会继续执行

标签:返回,异步,调用,函数,模型,阻塞,同步,IO
From: https://www.cnblogs.com/INnoVationv2/p/17598651.html

相关文章

  • TDengine连接数满了报错:Connection is not available, request timed out after 3000
    背景使用tdengine时遇到一个情况,应用程序使用连接池将接收到的实时数据插入TD时,会出现获取不到连接的报错.重现起一个模拟程序,发送100条数据到应用程序,应用程序从批量插入改为逐条插入td,重现出报错:org.springframework.jdbc.support.MetaDataAccessException:Could......
  • CronExpression 表达式详解
    参数名有效值Seconds(秒)可以用数字0~59表示Minutes(分)可以用数字0~59表示Hours(时)可以用数字0~23表示Day-of-Month(日)可以用数字1~31中的任一个值,但要注意一些特别的月份Month(月)可以用0~11或用字符串JAN,FEB,MAR,APR,MAY,JUN,JU......
  • JavaIO流
    JavaIO流基础概念数据流:一组有序,有起点和终点的字节的数据序列。包括输入流和输出流输入流:程序从输入流读取数据源。数据源包括外界(键盘、文件、网络…),即是将数据源读入到程序的通信通道输出流:程序向输出流写入数据。将程序中的数据输出到外界(显示器、打......
  • pdd.order.information.get拼多多店铺订单详情接口(店铺订单交易接口,店铺订单明文接口
    pdd.order.information.get拼多多店铺订单详情接口(店铺订单交易接口,店铺订单明文接口,店铺订单解密接口)代码对接教程如下:1.公共参数参数名称参数类型是否必填参数描述(接口代码教程wx19970108018)typeString必填API接口名称(点击获取请求key和secret)client_idString必填POP分配给应......
  • WPF使用FluentValidation进行表单验证
    WPF使用FluentValidation进行表单验证.net版本:6.0使用的NuGet包FluentValidation:11.6.0MaterialDesignThemes:4.9.0Prism.DryIoc:8.1.97在WPF里验证表单使用的是INotifyDataErrorInfo接口,这个接口长这样publicinterfaceINotifyDataErrorInfo{boolHasErrors{get;......
  • SpringBoot如何获取IOC容器以及修改Bean
    通过ApplicationContextAware来获得ApplicationContext,然后获取相关Bean进行操作举例说明@ConfigurationpublicclassCommonConfigimplementsApplicationContextAware{@OverridepublicvoidsetApplicationContext(ApplicationContextapplicationContext)throw......
  • 报错:WARNING: cannot load logging configuration file, logging is disabled
    问题:在webots里使用rospy时报warning。分析:无解决方案:参考https://blog.csdn.net/ckkboy/article/details/985048801.在/etc/下创建ros目录cd/etc/sudomkdirros2.将python_logging.conf文件复制到/etc/ros/下sudocp/opt/ros/melodic/etc/ros/python_log......
  • CodeGeeX2 模型全新上线,编程助手能力全面升级!
    第二代CodeGeeX代码生成模型CodeGeeX2-6B已于近日发布,并在CodeGeeX编程助手插件上全面上线。新模型基于ChatGLM2-6B架构加入代码预训练实现,精度更高、速度更快、能力更强。下面我们一起来看一下新版模型给CodeGeeX编程助手带来的变化吧:一、代码生成更快更精准,问答更智能相比......
  • A Novel Noise Injection-based Training Scheme for Better Model Robustness
    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布!https://arxiv.org/abs/2302.10802......
  • Educational Codeforces Round 152 (Rated for Div. 2) C. Binary String Copying
    题目大意为给定一个01字符串,给定m个区间,对于每个区间进行一次局部排序,求能得到的字符串种类数解法:因为字符串只包含0,1两个字符,我们观察可以得到,对于不同的区间来说如果排序后一样则说明肯定是某些位置在排序过程中无贡献,因此我们只需找出有贡献的位置即可对于一个区间[l,r],来说......