CN107506247B - 一种基于异步回调的任务处理方法与设备 - Google Patents
一种基于异步回调的任务处理方法与设备 Download PDFInfo
- Publication number
- CN107506247B CN107506247B CN201710687661.XA CN201710687661A CN107506247B CN 107506247 B CN107506247 B CN 107506247B CN 201710687661 A CN201710687661 A CN 201710687661A CN 107506247 B CN107506247 B CN 107506247B
- Authority
- CN
- China
- Prior art keywords
- node
- asynchronous
- processing
- predetermined
- task
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/547—Remote procedure calls [RPC]; Web services
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/544—Remote
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请的目的是提供一种基于异步回调的任务处理方法与设备。与现有技术相比,本申请获取待处理任务的语法树,该语法树包括节点以及节点关联关系;基于所述节点关联关系执行所述语法树中的节点,其中:当被执行的节点具有预定异步标记时,向异步调用对象发送异步处理指令,并返回具有所述预定异步标记的节点的父节点以继续处理任务;并且,当接收到来自所述异步调用对象的反馈时,返回所述具有预定异步标记的节点,从而减少基于异步回调的任务处理时间,在处理复杂业务逻辑的情况下仍能做到低延时响应。
Description
技术领域
本申请涉及计算机领域,尤其涉及一种基于异步回调的任务处理技术。
背景技术
异步调用在应用程序框架中具有广泛的应用,并且特指多线程情况下。它同Windows的消息循环机制,消息响应,消息队列,事件驱动机制以及设计模式中的观察者模式等都是紧密相关的。在单线程方式下,计算机是一台严格意义上的冯·诺依曼式机器,一段代码调用另一段代码时,只能采用同步调用,必须等待这段代码执行完返回结果后,调用方才能继续往下执行。有了多线程的支持,可以采用异步调用,调用方和被调方可以属于两个不同的线程,调用方启动被调方线程后,不等对方返回结果就继续执行后续代码。被调方执行完毕后,通过某种手段通知调用方:结果已经出来,请酌情处理。回调函数用于层间协作,上层将本层函数安装在下层,这个函数就是回调,而下层在一定条件下触发回调,例如作为一个驱动,是一个底层,它在收到一个数据时,除了完成本层的处理工作外,还将进行回调,它将这个数据交给上层应用层来做进一步处理。
异步回调或事件式编程的优势在于充分利用了线程计算资源极大提升了并发吞吐量,但对于大部分习惯了顺序逻辑编程的程序员而言,由于不符合思维习惯,编程难度很大,对于代码的审查和排错也很困难。现行的编程语言体系很难找到一种方式按传统顺序逻辑编码,又能享受到异步处理的好处,而且还能支持并行调用远程服务或异步处理代码以加速业务逻辑处理。因此,Zebra语言应运而生,它支持分布式并行处理,且能很好地处理异步回调问题。然而,现有技术的Zebra语言仍存在待改进的空间,以减少基于异步回调的任务处理时间,在处理复杂业务逻辑的情况下仍能做到低延时响应。
发明内容
本申请的一个目的是提供一种基于异步回调的任务处理方法与设备。
根据本申请的一个方面,提供了一种基于异步回调的任务处理方法,其中,该方法包括:
获取待处理任务的语法树,该语法树包括节点以及节点关联关系;
基于所述节点关联关系执行所述语法树中的节点,其中:当被执行的节点具有预定异步标记时,向异步调用对象发送异步处理指令,并返回具有所述预定异步标记的节点的父节点以继续处理任务;并且,当接收到来自所述异步调用对象的反馈时,返回所述具有预定异步标记的节点。
根据本申请的另一个方面,提供了一种基于异步回调的任务处理设备,其中,该设备包括:
获取装置,用于获取待处理任务的语法树,该语法树包括节点以及节点关联关系;
执行装置,用于基于所述节点关联关系执行所述语法树中的节点,其中:当被执行的节点具有预定异步标记时,所述执行装置向异步调用对象发送异步处理指令,并返回具有所述预定异步标记的节点的父节点以继续处理任务;并且,当接收到来自所述异步调用对象的反馈时,所述执行装置返回所述具有预定异步标记的节点。
根据本申请的又一个方面,提供了一种电子设备,至少包括处理器和存储单元,所述处理器被配置以执行以下指令:
获取待处理任务的语法树,该语法树包括节点以及节点关联关系;
基于所述节点关联关系执行所述语法树中的节点,其中:当被执行的节点具有预定异步标记时,向异步调用对象发送异步处理指令,并返回具有所述预定异步标记的节点的父节点以继续处理任务;并且,当接收到来自所述异步调用对象的反馈时,返回所述具有预定异步标记的节点。
与现有技术相比,本申请获取待处理任务的语法树,该语法树包括节点以及节点关联关系;基于所述节点关联关系执行所述语法树中的节点,其中:当被执行的节点具有预定异步标记时,向异步调用对象发送异步处理指令,并返回具有所述预定异步标记的节点的父节点以继续处理任务;并且,当接收到来自所述异步调用对象的反馈时,返回所述具有预定异步标记的节点,从而减少基于异步回调的任务处理时间,在处理复杂业务逻辑的情况下仍能做到低延时响应。进一步地,本申请在执行所述语法树过程中,通过预定数据并行标记、预定任务并行标记及预定异步标记三者的配合,使得整个系统拥有非常高的并行执行效率和更快的系统响应速度。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1示出根据本申请一个实施例的一种基于异步回调的任务处理方法流程图;
图2示出根据本申请一个实施例的一种集合数据并行化处理流程图;
图3示出根据本申请一个实施例的一种任务并行化处理流程图;
图4示出根据本申请另一个实施例的一种基于异步回调的任务处理方法流程图;
图5示出根据本申请一个实施例的一种基于异步回调的任务处理设备示意图;
图6示出根据本申请另一个实施例的一种基于异步回调的任务处理设备示意图;
图7示出根据本申请一个优选实施例的一种基于异步回调的任务处理的有限状态机概要图。
附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
下面结合附图对本申请作进一步详细描述。
在本申请一个典型的配置中,终端、服务网络的设备和可信方均包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
图1示出根据本申请一个实施例的一种基于异步回调的任务处理方法流程图,该方法包括步骤S11和步骤S12。
具体地,步骤S11中,设备1获取待处理任务的语法树,该语法树包括节点以及节点关联关系;步骤S12中,设备1基于所述节点关联关系执行所述语法树中的节点,其中:当被执行的节点具有预定异步标记时,向异步调用对象发送异步处理指令,并返回具有所述预定异步标记的节点的父节点以继续处理任务;并且,当接收到来自所述异步调用对象的反馈时,返回所述具有预定异步标记的节点。
在此,所述设备1包括但不限于网络设备通过网络相集成所构成的设备。其中,所述网络设备包括一种能够按照事先设定或存储的指令,自动进行数值计算和信息处理的电子设备,其硬件包括但不限于微处理器、专用集成电路(ASIC)、可编程门阵列(FPGA)、数字处理器(DSP)、嵌入式设备等。所述网络设备其包括但不限于计算机、网络主机、单个网络服务器、多个网络服务器集或多个服务器构成的云;在此,云由基于云计算(CloudComputing)的大量计算机或网络服务器构成,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个虚拟超级计算机。所述网络包括但不限于互联网、广域网、城域网、局域网、VPN网络、无线自组织网络(Ad Hoc网络)等。优选地,所述设备1还可以是运行于所述网络设备上的脚本程序。当然,本领域技术人员应能理解上述设备1仅为举例,其他现有的或今后可能出现的设备1如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
步骤S11中,设备1获取待处理任务的语法树,该语法树包括节点以及节点关联关系。
例如,根据所述待处理任务解析出语法树。对于所述语法树的每个节点,该节点关联关系包括该节点的父节点(若存在)以及该节点的子节点(若存在)。
在优选的实施例中,所述节点关联关系还包括该节点在父节点的部件类型,如if语句的子节点包含条件子语句、符合条件后的子语句集合等。
步骤S12中,设备1基于所述节点关联关系执行所述语法树中的节点,其中:当被执行的节点具有预定异步标记时,向异步调用对象发送异步处理指令,并返回具有所述预定异步标记的节点的父节点以继续处理任务;并且,当接收到来自所述异步调用对象的反馈时,返回所述具有预定异步标记的节点。
例如,按照深度优先算法执行所述语法树,即,从第一个子节点开始执行,如遇到子节点还存在子节点须执行,先向下执行完该子节点的所有下属子节点,该子节点其后才能最终标记为执行完毕。在执行过程中,调用关联服务组件以协同完成所述待处理任务。
在优选的实施例中,可以用“async”或其他符号作为所述预定异步标记。例如,可以用“async@“ws://sechost/checkpassword”(cardno,passwd)return(passwdIsCorrect);”标记异步服务调用,其中,“ws://sechost/checkpassword”为异步服务的调用Url地址,ws为内部协议名,对应异步服务的处理器类型;@标识符为了更清晰标注这是网络服务,不是必然需要的。
在执行所述语法树过程中,当执行到async节点(即具有预定异步标记的节点),向异步调用对象(如服务组件)发送异步处理指令,并返回至该async节点的父节点继续执行。当接收到所述异步调用对象的反馈,再返回执行该async节点。
优选地,所述异步处理指令包括所述具有预定异步标记的节点的地址信息。所述地址信息包括所述具有预定异步标记的节点在所述语法树中的地址标签。返回所述具有预定异步标记的节点,包括:根据所述地址信息返回并继续执行所述具有预定异步标记的节点。
例如,每个async节点(即具有预定异步标记的节点)都会在程序实例中标记一个唯一的运行地址(即所述地址标签),该运行地址就为该async节点的异步标记,在异步服务调用时,该标记会随同服务调用的参数信息发送给异步调用对象(如服务组件),异步调用对象处理完成后会将异步标记随同处理结果(如参数列表)一起反馈,根据异步标记(地址)找到对应的async节点并继续执行。
优选地,基于所述节点关联关系执行所述语法树中的节点,还包括:当被执行的节点具有预定数据并行标记时,并利用该节点的子节点产生多个并行的子任务,以并行处理数据。
在优选的实施例中,可以用“map”或其他符号作为所述预定数据并行标记。例如,在下述代码中,用“map”标记数据并行处理:
参照图2,在执行所述语法树过程中,当执行到map节点(即具有预定数据并行标记的节点),map节点会按程序指定并行数量,将数据集合同时分拆为多个子集合(每个子集合数量在map语法指定)并行执行。
举例而言,假设有1000条数据按照并行度10执行批量查询任务,每个批任务可一次性执行20条数据。那实际执行的情况是:
(1)将数据按20条一个数据集合拆成50个子数据集合(包);
(2)同时启动10个并行的子任务,每个子任务的执行语法树都是map内的子语法树,每个任务各分配了一个上述的子数据集合(包);
(3)每个子任务完成后会获得下一个未处理的子数据集合重新执行一遍语法树;
(4)map节点50个子数据集合都依次分配给并行的10个子任务执行完毕后,10个子任务关闭结束,map节点也标记为执行结束,控制权交给map节点的父节点。
优选地,返回具有所述预定异步标记的节点的父节点以继续处理任务,包括:当所述父节点具有预定任务并行标记且该父节点具有尚未被执行的子节点时,执行该父节点的尚未被执行的子节点;当所述父节点不具有预定任务并行标记时,执行该父节点。
在优选的实施例中,可以用“par”或其他符号作为所述预定任务并行标记。例如,在下述代码中,用“par”标记任务并行处理:
par{
async@“ws://sechost/checkpassword”(cardno,passwd)return(passwdIsCorrect);
async@“ws://cardhost/checkCardState”(cardno)return(cardStateIsOk);
}
参照图3,按照语法逻辑,如果该父节点不是并行处理(par或map)节点,则控制权将交给父节点的父节点,一直到父节点为语法树根节点(函数节点),则语法执行树对象线程释放;如果该父节点为并行处理(par或map)节点,则该父节点会继续往下执行其他子节点。此外,还有两个重要规则:
(1)某节点的所有子节点都必须完成处理后,该节点才可能在随后处理完毕(节点本级还有最后的相关处理逻辑)。
(2)非并行处理(par或map)节点的当前处理子节点未完成时,其余子节点不会继续向下执行;并行处理(par或map)节点的当前处理子节点未完成时,会继续向下处理其余子节点,一直到所有子节点得到处理(子节点标记为非初始化状态)。
总体而言,所述语法树中,map节点(即具有预定数据并行标记的节点)相当于数据并行执行单元,而par节点(即具有预定任务并行标记的节点)相当于指令并行执行单元,async节点(即具有预定异步标记的节点)大部分时候映射成外部服务调用。三者配合,使得整个系统拥有非常高的并行执行效率和更快的系统响应速度。
优选地,所述方法还包括:设备1当被执行的节点具有所述预定异步标记时,生成并注册IO处理事件函数,该IO处理事件函数的输入值包括所述反馈。返回所述具有预定异步标记的节点,包括:启动新的进程,将所述反馈输入所述IO处理事件函数,以返回并继续执行所述具有预定异步标记的节点。
例如,异步回调代码涉及到远程服务调用时,发出服务请求指令后,会注册一个匿名的IO处理事件函数到调度主线程,函数的输入值就是远程服务调用的返回结果,函数体为原同步代码示例中后面要执行的代码。不用等待远程服务调用结果,相关代码就往下继续执行,执行线程就会很快释放。远程服务调用结果返回后,触发原来注册的匿名事件函数,则启动一个新处理线程传入结果数据后开始执行该匿名事件函数。
优选地,如图4所示,所述方法还包括步骤S13’和步骤S14’;步骤S13’中,设备1接收来自远程的调用;步骤S14’中,设备1根据所述调用,启动任务处理。
例如,用户设备(如智能手机、平板电脑等)发起远程服务调用,在此,接收所述用户设备的远程服务调用,并相应地启动任务处理,根据待处理任务解析出语法树。
优选地,如图4所示,所述方法还包括步骤S15’;步骤S15’中,设备1当所述语法树的所有节点执行完毕时,向所述远程反馈处理结果。
例如,接上例,当所述语法树的所有节点执行完毕,即所述待处理任务执行完毕,向所述用户设备反馈关于远程服务调用的处理结果。
图5示出根据本申请一个实施例的一种基于异步回调的任务处理设备1,其中,所述设备1包括获取装置11和执行装置12。
具体地,所述获取装置11获取待处理任务的语法树,该语法树包括节点以及节点关联关系;所述执行装置12基于所述节点关联关系执行所述语法树中的节点,其中:当被执行的节点具有预定异步标记时,所述执行装置向异步调用对象发送异步处理指令,并返回具有所述预定异步标记的节点的父节点以继续处理任务;并且,当接收到来自所述异步调用对象的反馈时,所述执行装置返回所述具有预定异步标记的节点。
在此,所述设备1包括但不限于网络设备通过网络相集成所构成的设备。其中,所述网络设备包括一种能够按照事先设定或存储的指令,自动进行数值计算和信息处理的电子设备,其硬件包括但不限于微处理器、专用集成电路(ASIC)、可编程门阵列(FPGA)、数字处理器(DSP)、嵌入式设备等。所述网络设备其包括但不限于计算机、网络主机、单个网络服务器、多个网络服务器集或多个服务器构成的云;在此,云由基于云计算(CloudComputing)的大量计算机或网络服务器构成,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个虚拟超级计算机。所述网络包括但不限于互联网、广域网、城域网、局域网、VPN网络、无线自组织网络(Ad Hoc网络)等。优选地,所述设备1还可以是运行于所述网络设备上的脚本程序。当然,本领域技术人员应能理解上述设备1仅为举例,其他现有的或今后可能出现的设备1如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
所述获取装置11获取待处理任务的语法树,该语法树包括节点以及节点关联关系。
例如,根据所述待处理任务解析出语法树。对于所述语法树的每个节点,该节点关联关系包括该节点的父节点(若存在)以及该节点的子节点(若存在)。
在优选的实施例中,所述节点关联关系还包括该节点在父节点的部件类型,如if语句的子节点包含条件子语句、符合条件后的子语句集合等。
所述执行装置12基于所述节点关联关系执行所述语法树中的节点,其中:当被执行的节点具有预定异步标记时,所述执行装置向异步调用对象发送异步处理指令,并返回具有所述预定异步标记的节点的父节点以继续处理任务;并且,当接收到来自所述异步调用对象的反馈时,所述执行装置返回所述具有预定异步标记的节点。
例如,按照深度优先算法执行所述语法树,即,从第一个子节点开始执行,如遇到子节点还存在子节点须执行,先向下执行完该子节点的所有下属子节点,该子节点其后才能最终标记为执行完毕。在执行过程中,调用关联服务组件以协同完成所述待处理任务。
在优选的实施例中,可以用“async”或其他符号作为所述预定异步标记。例如,可以用“async@“ws://sechost/checkpassword”(cardno,passwd)return(passwdIsCorrect);”标记异步服务调用,其中,“ws://sechost/checkpassword”为异步服务的调用Url地址,ws为内部协议名,对应异步服务的处理器类型;@标识符为了更清晰标注这是网络服务,不是必然需要的。
在执行所述语法树过程中,当执行到async节点(即具有预定异步标记的节点),向异步调用对象(如服务组件)发送异步处理指令,并返回至该async节点的父节点继续执行。当接收到所述异步调用对象的反馈,再返回执行该async节点。
优选地,所述异步处理指令包括所述具有预定异步标记的节点的地址信息。所述地址信息包括所述具有预定异步标记的节点在所述语法树中的地址标签。返回所述具有预定异步标记的节点,包括:根据所述地址信息返回并继续执行所述具有预定异步标记的节点。
例如,每个async节点(即具有预定异步标记的节点)都会在程序实例中标记一个唯一的运行地址(即所述地址标签),该运行地址就为该async节点的异步标记,在异步服务调用时,该标记会随同服务调用的参数信息发送给异步调用对象(如服务组件),异步调用对象处理完成后会将异步标记随同处理结果(如参数列表)一起反馈,根据异步标记(地址)找到对应的async节点并继续执行。
优选地,基于所述节点关联关系执行所述语法树中的节点,还包括:当被执行的节点具有预定数据并行标记时,并利用该节点的子节点产生多个并行的子任务,以并行处理数据。
在优选的实施例中,可以用“map”或其他符号作为所述预定数据并行标记。例如,在下述代码中,用“map”标记数据并行处理:
参照图2,在执行所述语法树过程中,当执行到map节点(即具有预定数据并行标记的节点),map节点会按程序指定并行数量,将数据集合同时分拆为多个子集合(每个子集合数量在map语法指定)并行执行。
举例而言,假设有1000条数据按照并行度10执行批量查询任务,每个批任务可一次性执行20条数据。那实际执行的情况是:
(1)将数据按20条一个数据集合拆成50个子数据集合(包);
(2)同时启动10个并行的子任务,每个子任务的执行语法树都是map内的子语法树,每个任务各分配了一个上述的子数据集合(包);
(3)每个子任务完成后会获得下一个未处理的子数据集合重新执行一遍语法树;
(4)map节点50个子数据集合都依次分配给并行的10个子任务执行完毕后,10个子任务关闭结束,map节点也标记为执行结束,控制权交给map节点的父节点。
优选地,返回具有所述预定异步标记的节点的父节点以继续处理任务,包括:当所述父节点具有预定任务并行标记且该父节点具有尚未被执行的子节点时,执行该父节点的尚未被执行的子节点;当所述父节点不具有预定任务并行标记时,执行该父节点。
在优选的实施例中,可以用“par”或其他符号作为所述预定任务并行标记。例如,在下述代码中,用“par”标记任务并行处理:
par{
async@“ws://sechost/checkpassword”(cardno,passwd)return(passwdIsCorrect);
async@“ws://cardhost/checkCardState”(cardno)return(cardStateIsOk);
}
参照图3,按照语法逻辑,如果该父节点不是并行处理(par或map)节点,则控制权将交给父节点的父节点,一直到父节点为语法树根节点(函数节点),则语法执行树对象线程释放;如果该父节点为并行处理(par或map)节点,则该父节点会继续往下执行其他子节点。此外,还有两个重要规则:
(1)某节点的所有子节点都必须完成处理后,该节点才可能在随后处理完毕(节点本级还有最后的相关处理逻辑)。
(2)非并行处理(par或map)节点的当前处理子节点未完成时,其余子节点不会继续向下执行;并行处理(par或map)节点的当前处理子节点未完成时,会继续向下处理其余子节点,一直到所有子节点得到处理(子节点标记为非初始化状态)。
总体而言,所述语法树中,map节点(即具有预定数据并行标记的节点)相当于数据并行执行单元,而par节点(即具有预定任务并行标记的节点)相当于指令并行执行单元,async节点(即具有预定异步标记的节点)大部分时候映射成外部服务调用。三者配合,使得整个系统拥有非常高的并行执行效率和更快的系统响应速度。
优选地,所述设备1还包括函数生成装置(图中未示出);所述函数生成装置当被执行的节点具有所述预定异步标记时,生成并注册IO处理事件函数,该IO处理事件函数的输入值包括所述反馈。返回所述具有预定异步标记的节点,包括:启动新的进程,将所述反馈输入所述IO处理事件函数,以返回并继续执行所述具有预定异步标记的节点。
例如,异步回调代码涉及到远程服务调用时,发出服务请求指令后,会注册一个匿名的IO处理事件函数到调度主线程,函数的输入值就是远程服务调用的返回结果,函数体为原同步代码示例中后面要执行的代码。不用等待远程服务调用结果,相关代码就往下继续执行,执行线程就会很快释放。远程服务调用结果返回后,触发原来注册的匿名事件函数,则启动一个新处理线程传入结果数据后开始执行该匿名事件函数。
优选地,如图6所示,所述设备1还包括接收装置13’和启动装置14’;所述接收装置13’接收来自远程的调用;所述启动装置14’根据所述调用,启动任务处理。
例如,用户设备(如智能手机、平板电脑等)发起远程服务调用,在此,接收所述用户设备的远程服务调用,并相应地启动任务处理,根据待处理任务解析出语法树。
优选地,如图6所示,所述设备1还包括反馈装置15’;所述反馈装置15’当所述语法树的所有节点执行完毕时,向所述远程反馈处理结果。
例如,接上例,当所述语法树的所有节点执行完毕,即所述待处理任务执行完毕,向所述用户设备反馈关于远程服务调用的处理结果。
图7示出根据本申请一个优选实施例的一种基于异步回调的任务处理的有限状态机概要图。
在本实施例中,通过Zebra语言解释器实现基于异步回调的任务处理,所述Zebra语言解释器解释Zebra代码并分布式并行调用关联服务组件以协同完成待处理任务。
在此,Zebra分布式并行处理语言支持分布式并行处理,且能很好处理异步回调问题。Zebra语言遵循MDA(Model Driven Architecture,模型驱动架构)的设计思想,可以使用不同语言和运行时容器,原则上程序员的商业逻辑代码编写一次后可以运行在不同环境(包括脱离JVM),做好合适的服务抽象后,下层软件架构的优化演进将对业务功能代码没有任何影响。
参照图7,Zebra语言解释器的基本实现步骤可概要描述为:
(1)Zebra运行时容器(内置有Zebra语言解释器)接收外部调用请求,查找函数定义(预先解析为语法树),启动一个新的zeroutine(Zebra程序运行的基本单元),将程序执行控制权转交给Zebra语言解释器。
(2)初始化函数参数值为变量实例,设置为整个函数作用域。
(3)展开函数(function)的首层语句树节点,采用深度优先算法,按语法树定义先执行第一条语句,如果第一条语句不是赋值、对象实例方法调用、异步服务调用或变量定义等简单语句,向下再展开第一条语句的子语法树第一层,直到找到有可以立刻执行的简单语句。
(4)赋值语句将新变量值在父节点标记。取值操作是从本节点开始向上回溯,找到第一个名称相同的区域变量即为匹配,这和其他语言的作用域控制思想一致。
(5)每条语句执行过程中,标记语句执行树节点处理状态,执行完成后,清理下层语句执行树的执行现场,标记本节点已完成,控制权交给上层节点。上层节点从前一执行子节点向后遍历执行。
(6)遇到异步执行节点,在指令发出后即回到父节点,父节点如果不是par并行节点,则将控制权再往上一级的父节点交接,否则尝试运行下一子节点。对外发出的异步处理指令中标记了当前节点在运行树的地址标签。如果回溯到函数根节点没有树节点可运行,则整个zeroutine执行被挂起,直到收到异步服务的回应信息后被重新激活。
(7)异步服务执行的指令收到回应后,控制权根据之前标记的运行树地址回到发出异步服务执行指令的节点(断点),更新完节点状态后,重复开始执行。
(8)全部语法树节点执行完毕,返回函数值;或遇到return语句时,提前返回函数值;或遇到throws语句时抛出异常。
(9)for、while、if等流控语句在实现机制上和其他语言类似。
(10)map语句根据并行度设置,对集合数据重新打成子数据包,复制初始化相同的语法子树,开始并行处理。
(11)强类型检测。不同于javascript等纯脚本语言,Zebra标记了变量类型,可执行强类型检测,判断函数调用、赋值语句类型是否一致或是否可做转换(通过预加载的类型转换器)。
如果套用ANTLR之父Terence Parr的编译语言实现模式,可以将本实施例的Zebra语言解释器称为基于树的解释器,其主要是基于完整的语法树在解释执行过程中动态构造和清理语句执行树,可以有效地节约内存资源。语句执行树可以看作是语法解析树对象的运行实例。
根据本申请的又一个方面,提供了一种电子设备,至少包括处理器和存储单元,所述处理器被配置以执行以下指令:
获取待处理任务的语法树,该语法树包括节点以及节点关联关系;
基于所述节点关联关系执行所述语法树中的节点,其中:当被执行的节点具有预定异步标记时,向异步调用对象发送异步处理指令,并返回具有所述预定异步标记的节点的父节点以继续处理任务;并且,当接收到来自所述异步调用对象的反馈时,返回所述具有预定异步标记的节点。
与现有技术相比,本申请获取待处理任务的语法树,该语法树包括节点以及节点关联关系;基于所述节点关联关系执行所述语法树中的节点,其中:当被执行的节点具有预定异步标记时,向异步调用对象发送异步处理指令,并返回具有所述预定异步标记的节点的父节点以继续处理任务;并且,当接收到来自所述异步调用对象的反馈时,返回所述具有预定异步标记的节点,从而减少基于异步回调的任务处理时间,在处理复杂业务逻辑的情况下仍能做到低延时响应。进一步地,本申请在执行所述语法树过程中,通过预定数据并行标记、预定任务并行标记及预定异步标记三者的配合,使得整个系统拥有非常高的并行执行效率和更快的系统响应速度。
需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(ASIC)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本申请的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。
另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。
对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
Claims (19)
1.一种基于异步回调的任务处理方法,其中,该方法包括:
获取待处理任务的语法树,该语法树包括节点以及节点关联关系;
基于所述节点关联关系执行所述语法树中的节点,其中:当被执行的节点具有预定异步标记时,向异步调用对象发送异步处理指令,并返回具有所述预定异步标记的节点的父节点以继续处理任务;并且,当接收到来自所述异步调用对象的反馈时,返回所述具有预定异步标记的节点;
其中,返回具有所述预定异步标记的节点的父节点以继续处理任务,包括:
当所述父节点具有预定任务并行标记且该父节点具有尚未被执行的子节点时,执行该父节点的尚未被执行的子节点;
当所述父节点不具有预定任务并行标记时,执行该父节点,其中,如果该父节点不是并行处理节点,则控制权将交给该父节点的父节点,一直到父节点为所述语法树的根节点,则所述语法树的对象线程释放;如果该父节点为并行处理节点,则该父节点会继续往下执行其他子节点。
2.根据权利要求1所述的方法,其中,所述异步处理指令包括所述具有预定异步标记的节点的地址信息。
3.根据权利要求2所述的方法,其中,返回所述具有预定异步标记的节点,包括:
根据所述地址信息返回并继续执行所述具有预定异步标记的节点。
4.根据权利要求2所述的方法,其中,所述地址信息包括所述具有预定异步标记的节点在所述语法树中的地址标签。
5.根据权利要求1所述的方法,其中,该方法还包括:
当被执行的节点具有所述预定异步标记时,生成并注册IO处理事件函数,该IO处理事件函数的输入值包括所述反馈。
6.根据权利要求5所述的方法,其中,返回所述具有预定异步标记的节点,包括:
启动新的进程,将所述反馈输入所述IO处理事件函数,以返回并继续执行所述具有预定异步标记的节点。
7.根据权利要求1所述的方法,其中,基于所述节点关联关系执行所述语法树中的节点,还包括:
当被执行的节点具有预定数据并行标记时,并利用该节点的子节点产生多个并行的子任务,以并行处理数据。
8.根据权利要求1所述的方法,其中,该方法还包括:
接收来自远程的调用;
根据所述调用,启动任务处理。
9.根据权利要求8所述的方法,其中,该方法还包括:
当所述语法树的所有节点执行完毕时,向所述远程反馈处理结果。
10.一种基于异步回调的任务处理设备,其中,该设备包括:
获取装置,用于获取待处理任务的语法树,该语法树包括节点以及节点关联关系;
执行装置,用于基于所述节点关联关系执行所述语法树中的节点,其中:当被执行的节点具有预定异步标记时,所述执行装置向异步调用对象发送异步处理指令,并返回具有所述预定异步标记的节点的父节点以继续处理任务;并且,当接收到来自所述异步调用对象的反馈时,所述执行装置返回所述具有预定异步标记的节点;
其中,返回具有所述预定异步标记的节点的父节点以继续处理任务,包括:
当所述父节点具有预定任务并行标记且该父节点具有尚未被执行的子节点时,执行该父节点的尚未被执行的子节点;
当所述父节点不具有预定任务并行标记时,执行该父节点,其中,如果该父节点不是并行处理节点,则控制权将交给该父节点的父节点,一直到父节点为所述语法树的根节点,则所述语法树的对象线程释放;如果该父节点为并行处理节点,则该父节点会继续往下执行其他子节点。
11.根据权利要求10所述的设备,其中,所述异步处理指令包括所述具有预定异步标记的节点的地址信息。
12.根据权利要求11所述的设备,其中,返回所述具有预定异步标记的节点,包括:
根据所述地址信息返回并继续执行所述具有预定异步标记的节点。
13.根据权利要求11所述的设备,其中,所述地址信息包括所述具有预定异步标记的节点在所述语法树中的地址标签。
14.根据权利要求10所述的设备,其中,该设备还包括:
函数生成装置,用于当被执行的节点具有所述预定异步标记时,生成并注册IO处理事件函数,该IO处理事件函数的输入值包括所述反馈。
15.根据权利要求14所述的设备,其中,返回所述具有预定异步标记的节点,包括:
启动新的进程,将所述反馈输入所述IO处理事件函数,以返回并继续执行所述具有预定异步标记的节点。
16.根据权利要求10所述的设备,其中,基于所述节点关联关系执行所述语法树中的节点,还包括:
当被执行的节点具有预定数据并行标记时,并利用该节点的子节点产生多个并行的子任务,以并行处理数据。
17.根据权利要求10所述的设备,其中,该设备还包括:
接收装置,用于接收来自远程的调用;
启动装置,用于根据所述调用,启动任务处理。
18.根据权利要求17所述的设备,其中,该设备还包括:
反馈装置,用于当所述语法树的所有节点执行完毕时,向所述远程反馈处理结果。
19.一种电子设备,至少包括处理器和存储单元,所述处理器被配置以执行以下指令:
获取待处理任务的语法树,该语法树包括节点以及节点关联关系;
基于所述节点关联关系执行所述语法树中的节点,其中:当被执行的节点具有预定异步标记时,向异步调用对象发送异步处理指令,并返回具有所述预定异步标记的节点的父节点以继续处理任务;并且,当接收到来自所述异步调用对象的反馈时,返回所述具有预定异步标记的节点;
其中,返回具有所述预定异步标记的节点的父节点以继续处理任务,包括:
当所述父节点具有预定任务并行标记且该父节点具有尚未被执行的子节点时,执行该父节点的尚未被执行的子节点;
当所述父节点不具有预定任务并行标记时,执行该父节点,其中,如果该父节点不是并行处理节点,则控制权将交给该父节点的父节点,一直到父节点为所述语法树的根节点,则所述语法树的对象线程释放;如果该父节点为并行处理节点,则该父节点会继续往下执行其他子节点。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710687661.XA CN107506247B (zh) | 2017-08-11 | 2017-08-11 | 一种基于异步回调的任务处理方法与设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710687661.XA CN107506247B (zh) | 2017-08-11 | 2017-08-11 | 一种基于异步回调的任务处理方法与设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107506247A CN107506247A (zh) | 2017-12-22 |
CN107506247B true CN107506247B (zh) | 2020-07-31 |
Family
ID=60690854
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710687661.XA Active CN107506247B (zh) | 2017-08-11 | 2017-08-11 | 一种基于异步回调的任务处理方法与设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107506247B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109873863B (zh) * | 2019-01-18 | 2021-10-15 | 北京百度网讯科技有限公司 | 服务的异步调用方法和装置 |
CN109800063A (zh) * | 2019-01-25 | 2019-05-24 | 深圳乐信软件技术有限公司 | 业务并行处理方法、装置、服务器、存储介质 |
CN110083460A (zh) * | 2019-03-25 | 2019-08-02 | 华东师范大学 | 一种利用事件总线技术的微内核架构的设计方法 |
CN111258782B (zh) * | 2020-01-17 | 2023-11-03 | 京东科技信息技术有限公司 | 任务队列的处理方法和装置 |
CN114205339A (zh) * | 2021-12-01 | 2022-03-18 | 海南同享数字科技有限公司 | 一种异步通讯回调方法、装置、设备及存储介质 |
CN115562821A (zh) * | 2022-09-08 | 2023-01-03 | 深圳市正浩创新科技股份有限公司 | 任务执行方法、装置、计算机可读介质及电子设备 |
CN115544443B (zh) * | 2022-12-01 | 2023-03-21 | 西安葡萄城软件有限公司 | 电子表格中异步公式的计算方法及装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106327143A (zh) * | 2016-08-05 | 2017-01-11 | 东软集团股份有限公司 | 用于流程中的节点的方法和装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9632987B2 (en) * | 2008-01-02 | 2017-04-25 | International Business Machines Corporation | Technique that enhances the manipulation of an HTML tree presentation by using an array representation of the hierarchical path of a tree node |
-
2017
- 2017-08-11 CN CN201710687661.XA patent/CN107506247B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106327143A (zh) * | 2016-08-05 | 2017-01-11 | 东软集团股份有限公司 | 用于流程中的节点的方法和装置 |
Non-Patent Citations (2)
Title |
---|
《Redux async middleware and reducer creator》;lewis617;《https://github.com/lewis617/redux-amrc》;20170308;1-4 * |
Fork/Join框架简介;weakish;《https://segmentfault.com/a/1190000000377675》;20140104;1-4 * |
Also Published As
Publication number | Publication date |
---|---|
CN107506247A (zh) | 2017-12-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107506247B (zh) | 一种基于异步回调的任务处理方法与设备 | |
EP2956862B1 (en) | Call stacks for asynchronous programs | |
CN110244942B (zh) | 一种页面生成方法、装置及系统 | |
US20170277518A1 (en) | Converting visual diagrams into code | |
CN110908641B (zh) | 基于可视化的流计算平台、方法、设备和存储介质 | |
Cesarini et al. | Designing for scalability with Erlang/OTP: implement robust, fault-tolerant systems | |
US11586437B1 (en) | Data flow tracking in program verification | |
US20120084609A1 (en) | Method and System to Extract a Navigation Model for Analysis of a Web Application | |
US8495593B2 (en) | Method and system for state machine translation | |
Goetz et al. | Storm blueprints: patterns for distributed real-time computation | |
CN107391528B (zh) | 前端组件依赖信息搜索方法及设备 | |
US11321090B2 (en) | Serializing and/or deserializing programs with serializable state | |
US20160239275A1 (en) | Generating an integrated service | |
US20180025162A1 (en) | Application program analysis apparatus and method | |
Gavran et al. | Rely/guarantee reasoning for asynchronous programs | |
CN114880159A (zh) | 数据处理方法、装置、设备及存储介质 | |
Liu | Simulus: easy breezy simulation in python | |
Pagano et al. | A model based safety critical flow for the aurix multi-core platform | |
CN114116509A (zh) | 程序分析方法、装置、电子设备和存储介质 | |
CN109446454A (zh) | 一种轻量级高性能的PHPWeb系统框架及工作方法 | |
CN110489124B (zh) | 源代码执行方法、装置、存储介质及计算机设备 | |
US8918767B2 (en) | Pattern-based compilation of asynchronous consumption | |
US8572585B2 (en) | Using compiler-generated tasks to represent programming elements | |
US11023839B2 (en) | Workflow integration | |
CN110837367B (zh) | 用户界面处理方法、装置及电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP02 | Change in the address of a patent holder |
Address after: 250000 Luoyuan street, Lixia District, Jinan City, Shandong Province Patentee after: HENGFENG BANK CO.,LTD. Address before: 264001 No. 248, South Street, Zhifu District, Yantai City, Shandong Province Patentee before: HENGFENG BANK CO.,LTD. |
|
CP02 | Change in the address of a patent holder |