异步调用的理解

异步调用的理解1.分清异步/同步,阻塞/非阻塞。首先讲下个人对异步和同步,阻塞和非阻塞的概念的理解。关于这个概念看了许多解释,都是似是而非,并不能完全get到点。个人认为从进程间通信的角度理解比较好,在《操作系统》中关于的部分是这样解释的:进程间的通信时通过send()和receive()两种基本操作完成的。具体如何实现这两种基础操作,存在着不同的设计。 消息的传递有可能是阻塞的或非阻塞的…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

1.分清异步/同步,阻塞/非阻塞。

首先讲下个人对异步和同步,阻塞和非阻塞的概念的理解。

关于这个概念看了许多解释,都是似是而非,并不能完全get到点。个人认为从进程间通信的角度理解比较好,在《操作系统》中关于的部分是这样解释的:

进程间的通信时通过 send() 和 receive() 两种基本操作完成的。具体如何实现这两种基础操作,存在着不同的设计。 
消息的传递有可能是阻塞的或非阻塞的 – 也被称为同步或异步的:

  • 阻塞式发送(blocking send). 发送方进程会被一直阻塞, 直到消息被接受方进程收到。
  • 非阻塞式发送(nonblocking send)。 发送方进程调用 send() 后, 立即就可以其他操作。
  • 阻塞式接收(blocking receive) 接收方调用 receive() 后一直阻塞, 直到消息到达可用。
  • 非阻塞式接受(nonblocking receive) 接收方调用 receive() 函数后, 要么得到一个有效的结果, 要么得到一个空值, 即不会被阻塞。

上述不同类型的发送方式和不同类型的接收方式,可以自由组合。也就是说,阻塞和非阻塞可以理解为是发送方的行为,同步和异步是接收方的行为。举个例子:

我们现在去在一条步行街上的银行办理业务,根据场景可以解释为以下多种情况:

拿到号后,自己是一直在等候区等待(阻塞),还是出去逛街,时不时回来确认一下(非阻塞)。

轮到我们办理业务的时候,是我们自己确认轮到自己了(同步),还是银行会通知我们去办理业务(异步)。

 

2.异步调用的原理

如果我们使用一个异步调用方法的时候,可以理解为,发送完请求后,我们就可以继续去做自己的事情,然后在一个合适的节点去取数据即可。这里需要明确,是谁帮我们把这些事情做完的。一般,有两种情况:

第一种情况,本地IO操作时,可以通过DMA功能实现,在调用DMA传输数据的时候,CPU是不需要执行处理的,只需要发起传输和等待传输即可,也就是说,在这段时间里,CPU可以干点别的事情。DMA的英文拼写是“Direct Memory Access”,汉语的意思就是直接内存访问。DMA既可以指内存和外设直接存取数据这种内存访问的计算机技术,又可以指实现该技术的硬件模块(对于通用计算机PC而言,DMA控制逻辑由CPU和DMA控制接口逻辑芯片共同组成,嵌入式系统的DMA控制器内建在处理器芯片内部,一般称为DMA控制器,DMAC)。

第二种情况,通过多线程实现,主线程发起请求操作(这里用线程解释,多进程也是可以的),系统选取一个线程接过这个主线程的请求任务,然后当异步调用晚餐后,系统会从可用线程中选取一个线程执行回调函数,将结果推回给主线程。这里的异步调用,主要是为了让调用方法的主线程不需要同步等待在这个函数调用上,从而可以让主线程继续执行它下面的代码。

关于第二种情况,实现的核心思路在于:

1.其他线程/进程执行IO操作,让发起请求方可以不用等待。

2.在执行完异步调用后,通知调用者提取相关数据(这里可以使用注册回调函数的办法)。

 

3.RPC中的异步调用

RPC框架中,异步请求是一个很重要的方法。一般,在RPC框架中,如果我们使用同步调用,在发起请求后,只能等待结果,中间不能去干其他的事情。我们也称这种模式为请求-响应模式。这个模式优点在于时序清晰,逻辑简单,缺点也显而易见,大量的CPU时间会阻塞在等待请求的响应上,另外,也会存在只能由客户端向服务端发送请求,而服务端无法主动向客户端发送事件通知,也就是缺乏callback机制。

在RPC框架中,一个比较通用的异步调用方法,是在双向会话式的基础上,让调用方通过注册回调函数来获得请求结果实现。双向会话式通讯机制通过去掉请求的返回值,所有的方法请求都定义为无返回结果,调用方在发出请求之后就可以继续干后面的事情了,而不需要再等待服务返回结果。同时针对服务接口定义一个Callback接口用于服务端向客户端发送请求结果和事件通知,通过回调函数,服务器就可以主动向客户端发送消息,将消息推回给请求方。

以上,就是对异步调用的个人理解过程,从基本概念到如何实现。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/157651.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 万能量产工具_u盘量产工具怎样使用

    万能量产工具_u盘量产工具怎样使用MPALLv3.23.00版本量产工具可以用来给16G金士顿U盘(PS2251-50)主控刷固件量产。当然也适合其他ps22XX主控的量产只是不用刷固件,一般是量产坏了或者量产不了才涉及到刷固件。做设置分区数量,制作u盘启动盘、低级格式化等不需要刷固件即可成功量产。包含固件为50的固件:BN50V313M-8K.BIN BN50V3122KM-2@4k.BIN FW50FF01

    2022年9月9日
    3
  • 安装VMtool_虚拟机没有安装VMware Tools

    安装VMtool_虚拟机没有安装VMware Tools安装VMTOOL工具1.VMtoolsVMtools顾名思义就是Vmware的一组工具。主要用于虚拟主机显示优化与调整,另外还可以方便虚拟主机与本机的交互,如允许共享文件夹,甚至可以直接从本机向虚拟主机拖放文件、鼠标无缝切换、显示分辨率调整等,十分实用。2.先启动系统3.安装4.将安装包复制到桌面5.解压压缩包tar-zxvf*.tar.gz6.进入解压文件运行./vmware-install.pl7.安装完成选择yes,遇到选项回车。安装完成reboot。..

    2022年9月1日
    2
  • 静态vlan的配置方式_实例方法与静态方法的区别

    静态vlan的配置方式_实例方法与静态方法的区别文章目录1VLAN的概念及优势2VLAN的种类2.1VLAN的范围2.2静态VLAN和动态VLAN3静态VLAN的配置4Trunk介绍与配置5实例1VLAN的概念及优势物理分隔。将网络从物理上划分为若干个小网络,然后使用能隔离广播的路由设备将不同的网络连接起来实现通信。逻辑分隔。将网络从逻辑上划分为若干个小的虚拟网络,即VLAN(VirtualLocalAreaNetwork,虚拟局域网)。VLAN工作在OSI参考模型的数据链路层,一个VLAN就是一个交换网络,其中的所有用户都

    2022年9月18日
    4
  • centos配置yum源_linux配置离线yum源

    centos配置yum源_linux配置离线yum源执行yuminstall报错Error:Failedtodownloadmetadataforrepo‘appstream’:Cannotprepareinternalmirrorlist:NoURLsinmirrorlist排查:查看CentOS8所在服务器网络是否出现问题,可以用pingwww.baidu.com进行测试。网络没问题就看对应的软件源是否出现问题,具体排查/etc/yum.repos.d目录下这三个文件:CentOS-Ba

    2022年8月12日
    5
  • 游戏服务器架构演化史pdf_分布式游戏服务器

    游戏服务器架构演化史pdf_分布式游戏服务器类型1:卡牌、跑酷等弱交互服务端卡牌跑酷类因为交互弱,玩家和玩家之间不需要实时面对面PK,打一下对方的离线数据,计算下排行榜,买卖下道具即可,所以实现往往使用简单的HTTP服务器:登录时可以使用非对称加密(RSA,DH),服务器根据客户端uid,当前时间戳还有服务端私钥,计算哈希得到的加密key并发送给客户端。之后双方都用HTTP通信,并用那个key进行RC4加密。客户端收到key和时间

    2022年10月21日
    3
  • TLSF算法分析[通俗易懂]

    TLSF算法分析[通俗易懂]注:本文的大部分内容摘录自论文《TLSF:aNewDynamicMemoryAllocatorforReal-TimeSystems》,可以通过“科学上网”访问如下链接阅读原文:http://www.gii.upv.es/tlsf/files/ecrts04_tlsf.pdf。什么是TLSFTLSF是TwoLevelSegregatedFitmemoryal

    2022年6月30日
    22

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号