一种适用于异构接口的二阶段异步任务结果代理系统及方法技术方案

技术编号:36807978 阅读:8 留言:0更新日期:2023-03-09 00:27
本发明专利技术属于计算机软件领域,更具体地,涉及一种适用于异构接口的二阶段异步任务结果代理方法,包括:自研接口、第三方接口、第三方结果容器、自研结果容器、第三方结果代理容器;所述自研接口模块包括自研抽象接口、自研实现接口;所述自研实现接口接收任务A和任务B;当任务A提交时,创建一个自研结果容器对象;所述第三方接口用于接收与执行任务B;所述自研结果容器用于存储任务A的结果;所述自研结果容器接收任务B,并调用第三方接口;所述第三方结果容器用于接收任务B的结果;所述第三方结果代理容器在类型上继承或实现第三方结果容器。本发明专利技术不需要对被代理的结果容器及其相关库做任何修改,就可以无缝衔接两个异构接口的异步任务。步任务。步任务。

【技术实现步骤摘要】
一种适用于异构接口的二阶段异步任务结果代理系统及方法


[0001]本专利技术属于计算机软件领域,更具体地,涉及一种适用于异构接口的二阶段异步任务结果代理系统及方法。

技术介绍

[0002]随着计算机技术和网络技术的拓展及普及,计算机网络在人们学习、教育、工作和生活等多方面起到了不容忽视的作用,逐渐成为人们生活的必需品,人们对于计算机网络的依赖性与日俱增。在现代计算机软件领域,跨系统任务已经相当普遍,这种任务通常伴随大量的网络IO,因此,以异步的方式执行这些任务可以有效减少资源开销。除此之外,系统内也会存在某些异步任务,这些异步任务相比同步执行,会显著提高性能。
[0003]异步任务的普遍使用,也给软件
带来了新的挑战,其中之一就是对任务结果的监听及处理。
[0004]现代面向对象编程语言或库中,通常会有Future这一概念。Future代表一个任务的结果容器。在线程触发(或提交)一个异步任务时,调用的函数会同步地返回一个Future对象,此时Future中没有任务执行的结果。当经过某一段时间后,其他线程或其他系统完成了任务,并将任务结果设置到Future中,至此,任何对Future的访问都可以获取到任务的结果。
[0005]许多编程语言或库中,也存在将多个任务按顺序执行,并返回最终Future的方法。但是,在异构的库或接口之间,例如在自主研发的库与编程语言的标准工具库之间,进行异步任务结果的监听、传递、处理,是一件亟待解决的事情。

技术实现思路

[0006]本专利技术提出了一种适用于异构接口的二阶段异步任务结果代理系统及方法,其典型应用场景如下:
[0007]向自研接口提交一个异步任务Task_A,并指定在Task_A完成后向第三方接口提交一个异步任务Task_B,提交Task_A同步地返回一个Future_B对象。其中,自研接口代表使用本专利技术所述方法开发的异步任务接口。第三方接口代表已经存在的标准库或其他开源库的异步任务接口。Task代表一个函数或函数指针或策略对象,具体取决于所用编程语言。Future代表异步任务的结果容器。
[0008]本专利技术所述方法即为自研接口及其关联组件的实现方式。
[0009]本专利技术详细的技术方案如下:
[0010]一种适用于异构接口的二阶段异步任务结果代理系统及方法,其特征在于,包括:自研接口、第三方接口、第三方结果容器、自研结果容器、第三方结果代理容器;
[0011]所述自研接口包括自研抽象接口(Interface_A)、自研实现接口(A_Implement);
[0012]所述自研实现接口用于提交任务A和任务B;当任务A提交时,会创建一个Future_A对象即申请一个空间存放Future_A并同步返回;当任务B提交时,会将提交操作委托给第三
方接口;
[0013]所述第三方接口用于提交并执行任务B,当任务B提交时,第三方接口实现应同步返回一个Future_B对象;
[0014]所述自研结果容器用于存放任务A产生的结果,同时还记录了产生结果后,应执行的下一个任务即任务B。在自研结果容器中还未产生结果时,如果尝试获取任务结果,则返回空指针或有条件的挂起线程;
[0015]所述第三方结果容器用于存放任务B的结果;
[0016]所述第三方结果代理容器存有第三方结果容器且在类型上继承或实现第三方结果容器Future_B类型;用于使第三方结果容器适配自研接口。
[0017]进一步地,所述自研抽象接口包括Interface_A.submit函数:
[0018]所述Interface_A.submit函数,用于接收任务A和任务B,该函数返回值类型为Future_B类型;
[0019]所述自研实现接口用于实现Interface_A.submit函数。
[0020]所述Interface_A.submit函数按顺序执行两个异步任务,先执行任务A,在任务A完成后,再执行任务B。任务A可以被自研实现接口直接处理,任务A具体形式可以是函数、函数指针、策略对象,或其他受编程语言支持的类型。任务B可以被第三方接口处理,任务B的具体形式由第三方库(标准库或其他开源库)定义。
[0021]进一步地,所述自研结果容器包括:
[0022]Future_A.state字段,用于标记此容器中是否产生了结果(因为任务结果可能是空指针,所以要判断容器是否产生了结果,就必须有一个单独的标记字段);
[0023]Future_A.result字段,用于存放任务结果,其类型为任意类型;
[0024]Future_A.next字段,用于记录此容器产生结果后,需要执行的第二个任务,其类型为Task_B;
[0025]Future_A.future字段,用于保存Future_B的代理对象即用于保存FutureProxy,其类型为FutureProxy类型;
[0026]Future_A.set函数,用于为此容器设置结果,该函数接收一个参数,类型为任意类型。
[0027]进一步地,所述第三方结果代理容器包括:
[0028]FutureProxy.future字段,用于存放被代理的第三方结果容器,其类型为Future_B;
[0029]FutureProxy.set函数,用于设置被代理的第三方结果容器,该函数接收一个参数,类型为Future_B;
[0030]FutureProxy.get函数,用于获取被代理的第三方结果容器中的任务结果,该函数返回类型为任意类型。
[0031]进一步地,所述第三方结果容器包括:
[0032]Future_B.get函数,用于获取任务结果,即任务B的结果。
[0033]优选地,所述Future_A.set函数的执行流程如下:
[0034]a1,将Future_A.state字段由0置为1,表示此容器已产生结果;
[0035]a2,将任务一的结果赋值给Future_A.result字段;
[0036]a3,插入完全内存屏障或插入等效代码;
[0037]a4,调用第三方接口的submit函数,提交Future_A.next字段的任务B。如果执行任务B需要任务A的结果,则先将Future_A.result字段通过已知的被支持方式传入任务B,Interface_B.submit函数的调用会同步地返回一个Future_B对象;
[0038]a5,获取Future_A.future字段的FutureProxy对象,调用FutureProxy对象的FutureProxy.set函数,将步骤a4返回的Future_B对象作为参数传入。根据权利要求2所述的适用于异构接口的二阶段异步任务结果代理方法,其特征在于,所述A_Implement.submit函数的执行流程如下:
[0039]b1,检查两个任务A和任务B,任何一个为空指针,则终止程序;
[00本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种适用于异构接口的二阶段异步任务结果代理系统,其特征在于,包括:自研接口、第三方接口、第三方结果容器、自研结果容器、第三方结果代理容器;所述自研接口包括自研抽象接口、自研实现接口;所述自研实现接口接收任务A和任务B;当任务A提交时,创建一个自研结果容器对象;所述第三方接口模块用于接收与执行任务B;所述自研结果容器用于接收、执行任务A并储存结果、储存任务B并触发任务B的提交;所述第三方结果容器用于接收任务B的结果;所述第三方结果代理容器在类型上继承或实现第三方结果容器;所述第三方结果代理容器中存在一个字段用于保存第三方结果容器。2.根据权利要求1所述的适用于异构接口的二阶段异步任务结果代理系统,其特征在于,所述自研接口还包括:Interface_A.submit函数,用于接收并按顺序执行任务A和任务B;所述自研实现接口用于实现Interface_A.submit函数。3.根据权利要求1所述的适用于异构接口的二阶段异步任务结果代理系统,其特征在于,所述自研结果容器包括:Future_A.state字段,用于标记此容器中是否产生了结果;Future_A.result字段,用于存放任务结果;Future_A.next字段,用于记录此容器产生结果后,需要执行的任务B;Future_A.future字段,用于保存第二个任务的结果容器代理;Future_A.set函数,用于为此容器设置结果,该函数接收一个参数,类型为任意类型。4.根据权利要求1所述的适用于异构接口的二阶段异步任务结果代理系统,其特征在于,所述第三方结果代理容器包括:FutureProxy.future字段,用于存放第三方结果容器对象;FutureProxy.set函数,用于设置被代理的结果容器;FutureProxy.get函数,用于获取被代理的结果容器中的任务结果。5.根据权利要求1所述的适用于异构接口的二阶段异步任务结果代理系统,其特征在于,所述第三方结果容器包括:Future_B.get函数,用于获取被代理的结果容器中的任务结果。6.如权利要求1

5任一一项所述的一种适用于异构接口的二阶段异步任务结果代理系统的实现方法,其特征在于,包括如下步骤:自研接口接收任务A和任务B,并传输至自研实现接口:自研实现接口的submit函数接收任务A并调用线程执行任务A并将任务B传输至自研结果容器的Future_A.next字段;当任务A完成后,将任务A的结果作为参数调用自研结果容器的Future_A.set函数;自研结果容器的Future_A.set函数调用第三方接口的submit函数执行任务B,并接收结果;当任务B提交后,同步得到了一个Futu...

【专利技术属性】
技术研发人员:张奇硕韩月魏玉飞秦硕
申请(专利权)人:智洋创新科技股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1