异步调用方法、装置、存储介质及电子设备与流程

文档序号:25543323发布日期:2021-06-18 20:40阅读:96来源:国知局
异步调用方法、装置、存储介质及电子设备与流程

本申请涉及计算机技术领域,具体涉及一种异步调用方法、装置、存储介质及电子设备。



背景技术:

随着计算机技术的不断发展,分布式系统得到了广泛应用。在分布式系统中系统中设置有多个节点,具有不同功能的节点中之间可以进行相互调用以完成预设功能。

在现有技术中,为了提高分布式系统的处理效率,通常采用多线程实现节点之间进行异步调用,以使多个节点可以并行运行。但是,现有系统架构会采用多种编程语言版本,用户在调用服务时,使用同步调用会阻塞业务,需要等待服务端处理完成后才能继续,影响运行效率。



技术实现要素:

本申请实施例提供了一种异步调用方法、装置、存储介质及电子设备,可解决不同编程语言之间在交互时不支持异步调用的技术问题。所述技术方案如下:

第一方面,本申请实施例提供了一种异步调用方法,包括:

接收目标异步请求,确定所述目标异步请求对应的目标异步接口;其中,所述目标异步接口对应至少两种编程语言的目标服务;

通过所述目标异步接口生成所述目标异步请求对应的目标异步任务,以及将所述目标异步任务投递到任务池;

通过异步线程池中的目标异步线程执行所述任务池中的所述目标异步任务;其中,所述目标异步线程执行所述目标异步任务时调用所述目标服务。

第二方面,本申请实施例提供了一种异步调用装置,所述装置包括:

接收模块,用于接收目标异步请求,确定所述目标异步请求对应的目标异步接口;其中,所述目标异步接口对应至少两种编程语言的目标服务;

生成模块,用于通过所述目标异步接口生成所述目标异步请求对应的目标异步任务,以及将所述目标异步任务投递到任务池;

执行模块,用于通过异步线程池中的目标异步线程执行所述任务池中的所述目标异步任务;其中,所述目标异步线程执行所述目标异步任务时调用所述目标服务。

第三方面,本申请实施例提供了一种计算机存储介质,所述计算机存储介质存储有多条指令,所述指令适于由处理器加载并执行上述的方法步骤。

第四方面,本申请实施例提供了一种电子设备,包括:存储器和处理器;其中,所述存储器存储有计算机程序,所述计算机程序适用于由所述处理器加载并执行上述的方法步骤。

本申请一些实施例提供的技术方案带来的有益效果至少包括:

上述异步调用方法、装置、存储介质及电子设备工作时,接收目标异步请求,确定所述目标异步请求对应的目标异步接口,其中,所述目标异步接口对应至少两种编程语言的目标服务,通过所述目标异步接口生成所述目标异步请求对应的目标异步任务,以及将所述目标异步任务投递到任务池,通过异步线程池中的目标异步线程执行所述任务池中的所述目标异步任务,其中,所述目标异步线程执行所述目标异步任务时调用所述目标服务。本申请中电子设备通过预先定义不同编程语言对应的目标异步接口,在接收到接收目标异步请求后,可以直接通过对应的目标异步接口保存到任务池中,再通过线程池中的线程可以同时执行多个任务,实现不同编程语言之间在交互时的异步调用,提高了任务处理效率。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本申请实施例提供的一种调用系统的网络架构示意图;

图2是本申请实施例提供的一种异步调用方法的流程示意图;

图3是本申请实施例提供的一种异步调用方法的另一流程示意图;

图4是本申请实施例提供的一种任务池和线程池示意图;

图5是本申请实施例提供的一种获取请求示意图;

图6是本申请实施例提供的一种语言类型与异步接口关系对应示意图;

图7是本申请实施例提供的一种任务池投递示意图;

图8是本申请实施例提供的一种线程状态示意图;

图9是本申请实施例提供的一种任务阻塞投递示意图;

图10是本申请实施例提供的一种异步调用装置的结构示意图;

图11是本申请实施例提供的一种电子设备的结构示意图。

具体实施方式

为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施例方式作进一步地详细描述。

下面的描述设计附图时,除非另有表示,不同附图中的相同数字表示相同的或相似的要素。以下示例性实施例中描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。

在本申请的描述中,需要理解的是,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本申请中的具体含义。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。

下面结合具体的实施例对本申请进行详细说明。

图1示出了可以应用于本申请的异步调用方法的示例性系统架构100。

如图1所示,系统架构100可以包括用户101、电子设备102和网络103。网络103用于在用户101和电子设备102之间提供通信链路的介质。其中,系统构架100可以应用于各种实际应用场景,例如,当系统构架100应用于线上直播时,用户101可以为在进行线上直播课程中的老师或者学生或者学生家长以及各部门研发人员等,用户101可以用于触发电子设备102上的各种指令,电子设备102可以为老师客户端、学生客户端以及后台提供服务的服务端等设备,电子设备102可以但不限于用于负责读取用户101触发的各种指令,对指令译码并执行指令。示例性的,在进行线上直播课程的过程中用户101(例如但不限于老师甲)为了布置了一次在线考试,然后要求学生在规定时间内提交电子试卷,老师客户端在线进行评卷。老师客户端中的自动评卷系统可能由grpc系统框架构成,包含golang和python等多种编程语言共同编程,交互提供调用服务。多个用户101(例如但不限于甲以及学生乙)可以同时通过鼠标点击加载按钮,触发对上传试卷电子文档1业务的上传,然后电子设备102(例如但不限于老师客户端)同时获取到到试卷电子文档1的评卷请求,为了提高在线直播课程的效率。电子设备需要对多个试卷评卷请求进行异步处理,则电子设备可以调用对应的异步接口将多个评卷请求封装为多个对应的异步任务,投递到任务池中,再通过线程池中的多个线程同时对多个异步任务进行处理,最后可以将评卷结果分别发送给各个学生等相关操作。

电子设备102可以是硬件,也可以是软件。当电子设备102为硬件时,可以是具有调用异步集合功能的的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携式计算机和台式计算机等。当电子设备102为软件时,可以实现成多个软件或软件模块(例如:用来提供异步调用服务),也可以实现成单个软件或软件模块,在此不作具体限定。

网络103可以包括各种类型的有线通信链路或无线通信链路,用户101和电子设备102之间可以通过网络103进行数据交互,例如:有线通信链路包括光纤、双绞线或同轴电缆的,无线通信链路包括蓝牙通信链路、无线保真(wireless-fidelity,wi-fi)通信链路或微波通信链路等。

应理解,图1中的用户101、电子设备102和网络103的数目仅是示意性的。根据实现需要,可以是任意数量的用户101、电子设备102和网络103。

在下述方法实施例中,为了便于说明,仅以各步骤的执行主体为电子设备进行介绍说明。

下面将结合附图2至图3,对本申请实施例提供的异步调用方法进行详细介绍。

请参见图2,为本申请实施例提供了一种异步调用方法的交互示意图。所述方法可以包括以下步骤:

s201、接收目标异步请求,确定所述目标异步请求对应的目标异步接口。

一般的,请求可以是指为了满足用户不同的需求目的,电子设备所需要接收的消息或指令等,电子设备从而执行完成相应的任务/操作/步骤等服务,可以包括对电子设备资源的请求方法、资源的标示符以及使用的协议等。用户触发的请求可以包括同步请求和异步请求,同步请求可以是指电子设备在处理任务的过程中,电子设备会处于等待的状态,电子设备需要处理完当前唯一的一个任务把处理结果响应给用户后,再继续处理其它任务的请求,也即在处理一个任务的同时会阻塞其它任务的处理。异步请求可以是指电子设备在执行当前任务的同时,也可以正常的执行其它任务,有助于电子设备对业务处理的效率,提高用户体验。例如:在线教育的直播课程中,教师端的在线监考、多人直播等请求业务,学生端的课件加载、音视频上传等请求业务,由于需要体现实时性和高效性,都可以设置为异步请求。

所述目标异步请求可以是电子设备接收到的任意一种异步请求,这里的目标异步请求不具体是指某一种或一类具体异步请求,并没有作具体限定,可以是针对用户当前的操作获取的异步请求,为了与其它正在执行的另外用途的异步请求作区别。

电子设备接收目标异步请求的方式多种多样,本申请不作具体限定,例如:电子设备可以接收其它电子设备(例如但不限于学生客户端和老师客户端等)发送的目标异步请求,也可以是用户为了触发对业务的加载,而通过操作电子设备中的键盘、鼠标或者屏幕等设备生成的请求,例如:在进行网络直播课程的过程中,为了完成加载该音视频的业务,学生a可以通过手指点击加载按钮,然后电子设备检测到学生a的交互操作,进而获取对应业务的目标异步请求,基于该目标异步请求完成加载该音视频的业务。在一种可能的实施例中,目标异步请求还可以按照预设时间或者时间段产生,例如:在进行网络直播课程的过程中,当电子设备检测到本节英语课已经进行了10分钟,电子设备可以在预先定义的业务与时刻对应关系表中进行查询,确定此时需要完成的业务(例如但不限于加载课堂测试题1),然后基于该业务获取对应的标异步请求。

电子设备接收目标异步请求后,可以确定所述目标异步请求对应的目标异步接口,异步接口可以认为是指对协定进行定义的引用类型,接口可以提高程序代码的复用率,增加程序的可维护性,可扩展性,将该异步接口与上述各异步请求进行对应,以使得其它事件或者程序可以直接通过异步接口对各异步请求进行相应的调用服务。关于确定异步请求对应的异步接口的方式可以有多种,例如,电子设备可以通过异步请求中携带的标识确定异步请求对应的异步接口,还可以通过异步请求对应的编程语言类型确定异步请求对应的异步接口,还可以通过异步请求对应的目标服务的服务资源确定异步请求对应的异步接口,本申请对确定异步请求对应的异步接口的方式可以不做限定。

所述目标异步接口对应至少两种编程语言的目标服务,编程语言可以简单的理解为一种计算机和人都能识别的语言,一种计算机语言让程序员能够准确地定义计算机所需要使用的数据,并精确地定义在不同情况下所应当采取的行动,例如:go语言、python语言、swift语言、c语言、c++语言以及java语言等类型。服务可以是指为了满足用户不同的需求目的,电子设备所需要执行完成的任务/操作/步骤等。这里的目标服务不一定是指某一个(或一类)具体服务,并没有做具体限定,而可以是指针对用户当前的操作确定的服务,为了与其它正在执行的服务作区别。目标服务可以包括:应用程序服务、网页服务、数据库服务和通信服务等,例如:学生a在上网络直播课程的过程中,需要加载一段讲解音视频用于对知识点进行详细介绍,则对于电子设备而言可以将加载该音视频作为目标服务。由于不同语言类型存在不同的特性,现有技术中通常会使用多种语言共同开发一个框架,不同语言间可能在交互过程中,可能出现不支持异步调用服务的情况,因此本申请针对电子设备在调用至少两种编程语言的服务时,通过调用对应的异步接口来进行相关处理,使得能够实现异步调用。

s202、通过所述目标异步接口生成所述目标异步请求对应的目标异步任务,以及将所述目标异步任务投递到任务池。

一般的,异步任务可以是指用来实现异步请求的对应的任务,所述异步任务可以仅包含所述异步请求的内容,也可以包括其它的内容,可以根据用户实际需求自定义,例如:在线教育直播过程中,电子设备可以将学生a为了查询课程表的请求格式(例如但不限于电信号)直接转换为查询课程表的任务格式(例如但不限于模拟信号),生成对应的异步任务,电子设备还可以将学生a为了查询课程表的请求和相应的通信协议或日志等文件一起生成对应的异步任务。异步任务和异步接口存在对应关系,例如:电子设备可以设置异步任务与异步接口的关系对应表,电子设备也可以通过异步任务与异步接口的共同标识来进行判断。

所述目标异步任务可以是电子设备获取到的任意一种异步任务,这里的目标异步任务不具体是指某一种或一类具体异步任务,并没有作具体限定,可以是针对用户当前的操作获取的异步任务,为了与其它正在执行的另外用途的异步任务作区别,为了与所述目标异步请求作对应。

电子设备生成所述目标异步请求对应的目标异步任务的方式多种多样,例如:电子设备可以设置在本地的预设生成规则生成所述目标异步请求对应的目标异步任务,所述预设生成规则可以通过用户指令实时进行更新、删除以及新增等操作,电子设备也可以通过调用布置在云端(例如但不限于模型服务器等)的生成模块,快速智能地生成所述目标异步请求对应的目标异步任务。

任务池可以是指电子设备中业务层存储任务的组件,是任务的容器,是在线程间共享任务的实例池,它对客户层是完全透明的,例如:任务池可以为队列、表格、数据库等形式。电子设备应用在启动时,任务池被创建,停止时被清除,由于任务池提供的对任务的缓存机制,可以减少频繁地创建和回收任务实例产生的系统开销,并节省存储资源。电子设备生成所述目标异步请求对应的目标异步任务后,首先可以获取任务池的存储地址,然后电子设备可以将所述目标异步任务存储到所述任务池的存储地址对应的存储空间中。其中所述任务池的数量可以为一个也可以为多个,可以根据实际任务量设置适量的任务池,有助于提高电子设备的运行效率,所述任务池可以存储在电子设备的本地,也可以上传到云端(例如但不限于存储服务器),然后电子设备可以通过数据传输方式进行交互,有助于减少电子设备的存储空间,调高运行效率。

s203、通过异步线程池中的目标异步线程执行所述任务池中的所述目标异步任务。

一般的,线程池可以是指一种线程使用模式的容器,在实际使用过程中线程过多会带来调度开销,进而影响缓存局部性和整体性能,而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价,线程池不仅能够保证内核的充分利用,还能防止过分调度,可用线程数量应该取决于可用的并发处理器、处理器内核、内存、网络编程接口等的数量,例如,线程数一般取中央处理器数量+2比较合适,线程数过多会导致额外的线程切换开销。

异步线程池可以理解为电子设备专门用来处理异步任务的线程池,是为了区别同步线程池,异步线程池的数量、容量以及具体表现形式大小不作具体限定,可以根据实际使用情况由用户实时自定义设置。异步线程可以是指异步线程池中专门处理所述目标异步任务的线程,所述目标异步线程可以是电子设备生成的任意一个异步线程,这里的目标异步线程不具体是指某一种或一类具体异步线程,并没有作具体限定,可以是针对用户当前的操作生成的异步线程,为了与其它正在执行的另外用途的异步线程作区别,为了与所述目标异步任务作对应。

电子设备将所述目标异步任务投递到任务池后,然后就可以根据任务执行顺序,顺序执行到所述所述任务池中的所述目标异步任务,例如:电子设备可以通过异步线程池中的所述目标异步线程执行所述目标异步任务时调用所述目标服务,来完成所述目标异步任务,这样有助于电子设备在不同编程语言之间交互时实现异步调用,例如:任务池中有5个异步任务(包括所述目标异步任务,编号为3),线程池中有4个且都处于空闲状态,则电子设备通过编号3的目标异步线程来执行所述编号为3的目标异步任务,其中第5号任务需要等待其它4个线程处理完后再来处理。

由上述内容可知,接收目标异步请求,确定所述目标异步请求对应的目标异步接口,其中,所述目标异步接口对应至少两种编程语言的目标服务,通过所述目标异步接口生成所述目标异步请求对应的目标异步任务,以及将所述目标异步任务投递到任务池,通过异步线程池中的目标异步线程执行所述任务池中的所述目标异步任务,其中,所述目标异步线程执行所述目标异步任务时调用所述目标服务。本申请中电子设备通过预先定义不同编程语言对应的目标异步接口,在接收到接收目标异步请求后,可以直接通过对应的目标异步接口保存到任务池中,再通过线程池中的线程可以同时执行多个任务,实现不同编程语言之间在交互时的异步调用,提高了任务处理效率。

请参见图3,为本申请实施例提供了一种异步调用方法的另一交互示意图。该异步调用方法可以包括以下步骤:

s301、获取系统框架的编程语言类型,以及基于所述编程语言类型生成异步接口集合。

一般的,系统框架可以是指对已确定的需求的技术实现构架、作好规划,运用成套、完整的工具,在规划的步骤下去完成任务。抽象来说,它是计算机系统结构,或称计算机体系结构,是一个系统在其所处环境中最高层次的概念,确定一台计算机硬件和软件之间的衔接,具体地说电子设备体系结构指的是电子设备系统设计的观念与架构,描述计算机在实做的设计原则等。例如:在线直播教育行业中的,资源管理框架、多人线上直播框架和压测调试框架等。编程语言类型可以包括:go语言、python语言、swift语言、c语言、c++语言以及java语言等类型,电子设备可以通过多种编程语言来设计实现系统架构。异步接口集合可以是指一个或多个确定异步接口所构成的整体,例如:电子设备可以通过设置异步接口表来表示所述异步接口集合,电子设备也可以确定每个异步接口的路径来确定异步接口集合,所述异步接口集合的形式、数量、以及逻辑关系并不具体限定。

在本申请中,电子设备首先可以获取系统框架的编程语言类型,以及基于所述编程语言类型生成异步接口集合,例如:电子设备可以通过技术人员主动输入的go语言、python语言和swift语言三个语言类型来生成go语言和python语言,python语言和swift语言,以及go语言、python语言和swift语言等多个异步接口,其中所述异步接口对应的语言类型数量不作具体限定,可以是两种,也可以是三种、四种等,可以由用户根据实际情况实时自定义。在一种可能的实施例中,电子设备也可以自动收索本地的系统架构的组成语言了性标签来获取系统框架的编程语言类型,电子设备也可以爬取互联网上多个语言类型,来预设可能会用到的异步接口等,电子设备可以将异步接口集合存储在本地,也可以存储在云端等其它设备,有助于提高电子设备运行效率,节省时间,提高用户体验。

s302、检测任务池和异步线程池是否初始化,若所述任务池和所述异步线程池未初始化,则获取初始化配置信息,根据所述初始化配置信息对所述任务池和所述异步线程池进行初始化处理。

一般的,初始化在计算机编程领域中可以是指为数据对象或变量赋初值,在电子设备中,为每一个变量赋初值被视为良好的编程习惯,有助于减少出现错误的可能性。初始化配置信息可以是指在配置任务池或者线程池时的初始化参数等,可以包括核心数量大值、总数最大值、非核心闲置超时时长、最大并发数、统一编码、数据进出方式(例如但不限于先进先出、先进后出等)、任务池阈值、任务队列以及拒绝策略等。电子设备在生成异步接口集合后,可以检测任务池和异步线程池是否初始化,例如:电子设备可以在任务池和异步线程池中获取委托通知,或者确定监控返回值、或者遍历任务列表等方式来判断是否初始化。若所述任务池和所述异步线程池未初始化,则获取初始化配置信息,例如电子设备确定任务池的核心任务数量为5,非核心任务数量为3,任务池阈值为6,进出方式为先进先出,超时阻塞时常为60秒等。然后电子设备根据所述初始化配置信息对所述任务池和所述异步线程池进行初始化处理,这样有助于电子设备减少运行错误,提高运行的稳定性。如图4所示,任务池中可以有多个任务,然后异步线程池中可以有多线程,电子设备通过系统框架(例如但不限于executor框架)预先设置执行策略,每个线程执行对应的任务,例如:线程1处理任务1,线程2处理任务2,线程3处理任务3等。其中每个线程关联对应的内核线程,然后通过电子设备上的线程调度器(例如但不限于oskernel)进行中央处理器资源调度,每个线程最终都会映射到中央处理器中进行处理,如果中央处理器存在多核,那么就可以并行执行多个线程任务。

s303、接收目标异步请求,解析所述目标异步请求确定目标编程语言类型,基于所述目标编程语言类型在所述异步接口集合中查询对应的目标异步接口。

一般的,如图5所示,用户可以先选择需要上传的资源数据(例如但不限于文件1),然后可以通过点击电子设备显示屏上的“确定上传”按钮,将文件1上传到电子设备,也即电子设备接收到上传资源数据的请求。电子设备在接收到请求之后,还需要判断所述请求的请求类型,然后代用不同的接口,例如:电子设备可以通过解析请求的文件头通过头参数来确定请求类型,若关键字async为ture,则电子设备可以确定为异步请求,若为false,则电子设备可以确定为,然后电子设备还可以通过开始人员设置的请求类型标志来确定。然后电子设备解析所述目标异步请求确定目标编程语言类型,基于所述目标编程语言类型在所述异步接口集合中查询对应的目标异步接口,例如:电子设备确定目标编程语言类型为go语言和python语言,那么电子设备可以在所述异步接口集合中遍历查询对应的目标异步接口a,也可以通过目标编程语言类型编号确定对应的目标异步接口a,有助于电子设备快速准确确定对应的异步接口。如图6所示,电子设备可以将语言类型与异步接口设置对应关系,例如:若服务涉及go语言类型和python语言类型两种类型,则对应异步接口1,若服务涉及c语言类型和java语言类型两种类型,则对应异步接口2,若服务涉及vb语言类型、php语言类型和c#语言类型三种类型,则对应异步接口3等。

s304、通过所述目标异步接口将所述目标异步请求的请求体和回调函数封装为对应的目标异步任务。

一般的,请求一般可以包含请求行、请求头和请求体,请求行主要可以包括请求方法、请求地址和协议及版本等信息,请求头主要可以包括能够接收的内容类型、请求网页实体的一个或者多个子范围字段、指定请求和响应遵循的缓存机制和授权的授权证书等信息,请求体主要可以包括请求需要调用的服务类型等信息。回调函数可以认为是一个被作为参数传递的函数,回调函数的使用可以大大提升编程的效率,这使得它在现代编程中被非常多地使用,同时,使用回调函数可以实现有一些特殊需求。封装可以认为隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别,将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也可以认为是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。电子设备查询到对应的目标异步接口后,可以通过所述目标异步接口将所述目标异步请求的请求体和回调函数封装为对应的目标异步任务,其中,所述回调函数至少包括成功回调函数和失败回调函数等。

s305、判断任务池中的使用量是否小于所述任务池阈值,若不小于,则对所述目标异步任务进行超时阻塞处理。

一般的,电子设备将所述目标异步请求的请求体和回调函数封装为对应的目标异步任务后,需要判断任务池中的使用量是否小于所述任务池阈值,例如:电子设备预先设置任务池的任务池阈值为10,确定当前任务池中的使用量为10,则确定不小于,需要对所述目标异步任务进行超时阻塞处理,设置超时阻塞时长为3分钟,若3分钟之内,当前任务池中的没有空闲的使用量,则电子设备可以采取超时策略(例如但不限于丢弃该任务或者取出任务池中优先级高的其它任务等)。若电子设备确定小于,则直接将所述目标异步任务投递到任务池。

s306、在所述任务池中的任务数量小于或等于所述任务池阈值时,将超时阻塞处理的目标异步任务投递到任务池。

一般的,电子设备若确定在所述任务池中的任务数量小于或等于所述任务池阈值时,则将超时阻塞处理的目标异步任务投递到任务池。如图7所示,当任务池阈值为4时,当前任务池存在步任务1和异步任务2两个任务异,小于任务池阈值,然后电子设备可以直接将异步任务3投递到任务池中。

s307、确定所述异步线程池中所有异步线程的运行状态,将所述异步线程池中处于空闲状态的异步线程作为目标异步线程。

一般的,异步线程可以理解为处理任务、进行运算调度的设备资源的最小单位等,异步线程的运行状态(生命周期)可以包括新建装状态、可运行状态、运行状态、阻塞状态和死亡状态等。电子设备将所述目标异步任务投递到任务池后,需要确定所述异步线程池中所有异步线程的运行状态,例如:电子设备可以通过调用isalive函数等方式,然后确定返回值来识别,如果是可运行或被阻塞,则函数返回true;如果线程仍旧是新建状态且不是可运行的,或者线程死亡了,则函数返回false。如图8所示,当用操作符new创建一个线程时,例如newthread(r),线程还没有开始运行,此时线程处在新建状态,当一个线程处于新生状态时,程序还没有开始运行线程中的代码。然后一个新创建的线程并不自动开始运行,要执行线程,必须调用线程的函数start(),当线程对象调用start()函数即启动了线程,start()函数创建线程运行的系统资源,并调度线程运行函数run(),当start()方法返回后,线程就处于就绪状态。然后当线程获得中央处理器时间后,线程才进入运行状态,真正开始执行run()函数。然后线程运行过程中,可能由于各种原因进入阻塞状态,例如:线程在等待某个触发条件、线程通过调用sleep方法进入睡眠状态以及线程调用一个在输入/输出上被阻塞的操作等,所谓阻塞状态是正在运行的线程没有运行结束,暂时让出中央处理器资源,这时其他处于就绪状态的线程就可以获得中央处理器时间,进入运行状态。然后线程由于run()函数正常退出而自然死亡或者一个未捕获的异常终止了run()函数而使线程猝死,导致线程处于死亡状态,电子设备可以通过调用isalive函数,再判断返回值来确定线程在当前是否存活着(就是要么是可运行的,要么是被阻塞了)。

s308、通过所述目标异步线程从所述任务池中的取出所述目标异步任务,通过所述目标异步线程解析所述目标异步任务确定所述目标服务,以及加载所述目标服务。

一般的,电子设备确定目标异步线程后,可以通过所述目标异步线程从所述任务池中的取出所述目标异步任务,通过所述目标异步线程解析所述目标异步任务确定所述目标服务,以及加载所述目标服务。例如:电子设备确定线程池中线程3为目标异步线程,然后取出任务池中的目标异步任务a,然后进行解析,确定所述目标服务为加载go语言编写的加载文件1以及python语言编写的界面显示控件3,最后调用对应的加载资源对加载文件1和界面显示控件3这两个服务进行加载。

s309、获取加载结果,以及根据所述加载结果执行所述回调函数。

一般的,电子设备加载所述目标服务后,可以获取加载结果,若加载成功,则电子设备执行成功回调函数,继续处理后续业务逻辑,若加载失败,电子设备可以检测异常加载(例如但不限于进行预设次数的重复加载),若最后还是失败,则还可以收集加载失败参数,基于所述加载失败参数执行失败回调函数,进行后续相关逻辑业务处理。其中,所述回调函数的函数参数和返回值可以根据用户实际使用情况自定义设置数量和类型等。

s310、检测当前是否存在超时阻塞处理的异步任务,若存在,将超时阻塞处理时间最长的异步任务投递到所述任务池。

一般的,电子设备通过异步线程池中的目标异步线程执行所述任务池中的所述目标异步任务之后,需要检测当前是否存在超时阻塞处理的异步任务,若存在,在满足超时时长条件下将超时阻塞处理时间最长的异步任务投递到所述任务池。在一种可能的实施例中,电子设备还可以根据异步任务类型、任务量大小或者历史任务类型等信息来确定投递到所述任务池的异步任务。如图9所示,当任务池中当前任务数量达到任务池阈值时,可以先将任务(例如但不限于异步任务5和异步任务6)放入阻塞队列中等待投递到任务池,当任务池中当前任务数量小于任务池阈值时,可以将阻塞队列中的异步任务(例如但不限于异步任务5)放入任务池。

本申请实施例的方案在执行时,接收目标异步请求,确定所述目标异步请求对应的目标异步接口,其中,所述目标异步接口对应至少两种编程语言的目标服务,通过所述目标异步接口生成所述目标异步请求对应的目标异步任务,以及将所述目标异步任务投递到任务池,通过异步线程池中的目标异步线程执行所述任务池中的所述目标异步任务,其中,所述目标异步线程执行所述目标异步任务时调用所述目标服务。本申请中电子设备通过预先定义不同编程语言对应的目标异步接口,在接收到接收目标异步请求后,可以直接通过对应的目标异步接口保存到任务池中,再通过线程池中的线程可以同时执行多个任务,实现不同编程语言之间在交互时的异步调用,提高了任务处理效率。

下述为本申请装置实施例,可以用于执行本申请方法实施例。对于本申请装置实施例中未披露的细节,请参照本申请方法实施例。

请参见图10,其示出了本申请一个示例性实施例提供的异步调用装置的结构示意图,以下简称调用装置10。调用装置10可以通过软件、硬件或者两者的结合实现成为终端的全部或一部分。包括:

接收模块1001,用于接收目标异步请求,确定所述目标异步请求对应的目标异步接口;其中,所述目标异步接口对应至少两种编程语言的目标服务;

生成模块1002,用于通过所述目标异步接口生成所述目标异步请求对应的目标异步任务,以及将所述目标异步任务投递到任务池;

执行模块1003,用于通过异步线程池中的目标异步线程执行所述任务池中的所述目标异步任务;其中,所述目标异步线程执行所述目标异步任务时调用所述目标服务。

在一种可能的实施例中,所述调用装置10还包括:

第一获取模块,用于获取系统框架的编程语言类型,以及基于所述编程语言类型生成异步接口集合。

在一种可能的实施例中,所述接收模块1001包括:

解析单元,用于解析所述目标异步请求确定目标编程语言类型;

查询单元,用于基于所述目标编程语言类型在所述异步接口集合中查询对应的目标异步接口。

在一种可能的实施例中,所述调用装置10还包括:

第一检测模块,用于检测任务池和异步线程池是否初始化;

第二获取模块,用于若所述任务池和所述异步线程池未初始化,则获取初始化配置信息;其中,所述初始化配置信息至少包括任务池阈值;

处理模块,用于根据所述初始化配置信息对所述任务池和所述异步线程池进行初始化处理。

在一种可能的实施例中,所述生成模块1002包括:

封装单元,用于通过所述目标异步接口将所述目标异步请求的请求体和回调函数封装为对应的目标异步任务;其中,所述回调函数至少包括成功回调函数和失败回调函数。

在一种可能的实施例中,所述生成模块1002包括:

判断单元,用于判断任务池中的使用量是否小于所述任务池阈值;

阻塞单元,用于若不小于,则对所述目标异步任务进行超时阻塞处理;

投递单元,用于在所述任务池中的任务数量小于或等于所述任务池阈值时,将超时阻塞处理的目标异步任务投递到任务池。

在一种可能的实施例中,所述执行模块1003包括:

第一确定单元,用于确定所述异步线程池中所有异步线程的运行状态;

第二确定单元,用于将所述异步线程池中处于空闲状态的异步线程作为目标异步线程;

取出单元,用于通过所述目标异步线程从所述任务池中的取出所述目标异步任务,以及执行所述目标异步任务。

在一种可能的实施例中,所述执行模块1003包括:

加载单元,用于通过所述目标异步线程解析所述目标异步任务确定所述目标服务,以及加载所述目标服务;

执行单元,用于获取加载结果,以及根据所述加载结果执行所述回调函数。

在一种可能的实施例中,所述调用装置10还包括:

第二检测模块,用于检测当前是否存在超时阻塞处理的异步任务;

投递模块,用于若存在,将超时阻塞处理时间最长的异步任务投递到所述任务池。

本申请实施例和图2至图3的方法实施例基于同一构思,其带来的技术效果也相同,具体过程可参照图2至图3的方法实施例的描述,此处不再赘述。

所述装置10可以为实现相关功能的现场可编程门阵列(field-programmablegatearray,fpga),专用集成芯片,系统芯片(systemonchip,soc),中央处理器(centralprocessorunit,cpu),网络处理器(networkprocessor,np),数字信号处理电路,微控制器(microcontrollerunit,mcu),还可以采用可编程控制器(programmablelogicdevice,pld)或其他集成芯片。

本申请实施例的方案在执行时,接收目标异步请求,确定所述目标异步请求对应的目标异步接口,其中,所述目标异步接口对应至少两种编程语言的目标服务,通过所述目标异步接口生成所述目标异步请求对应的目标异步任务,以及将所述目标异步任务投递到任务池,通过异步线程池中的目标异步线程执行所述任务池中的所述目标异步任务,其中,所述目标异步线程执行所述目标异步任务时调用所述目标服务。本申请中电子设备通过预先定义不同编程语言对应的目标异步接口,在接收到接收目标异步请求后,可以直接通过对应的目标异步接口保存到任务池中,再通过线程池中的线程可以同时执行多个任务,实现不同编程语言之间在交互时的异步调用,提高了任务处理效率。

本申请实施例还提供了一种计算机存储介质,所述计算机存储介质可以存储有多条指令,所述指令适于由处理器加载并执行如上述的方法步骤,具体执行过程可以参见图2或图3所示实施例的具体说明,在此不进行赘述。

本申请还提供了一种计算机程序产品,该计算机程序产品存储有至少一条指令,所述至少一条指令由所述处理器加载并执行以实现如上各个实施例所述的模板的控制方法。

请参见图11,为本申请实施例提供了一种电子设备的结构示意图。如图11所示,所述电子设备11可以包括:至少一个处理器1101,至少一个网络接口1104,用户接口1103,存储器1105,至少一个通信总线1102。

其中,通信总线1102用于实现这些组件之间的连接通信。

其中,用户接口1103可以包括显示屏(display)、摄像头(camera),可选用户接口1103还可以包括标准的有线接口、无线接口。

其中,网络接口1104可选的可以包括标准的有线接口、无线接口(如wi-fi接口)。

其中,处理器1101可以包括一个或者多个处理核心。处理器1101利用各种借口和线路连接整个终端1100内的各个部分,通过运行或执行存储在存储器1105内的指令、程序、代码集或指令集,以及调用存储在存储器1105内的数据,执行终端1100的各种功能和处理数据。可选的,处理器1101可以采用数字信号处理(digitalsignalprocessing,dsp)、现场可编程门阵列(field-programmablegatearray,fpga)、可编程逻辑阵列(programmablelogicarray,pla)中的至少一种硬件形式来实现。处理器1101可集成中央处理器(centralprocessingunit,cpu)、图像处理器(graphicsprocessingunit,gpu)和调制解调器等中的一种或几种的组合。其中,cpu主要处理操作系统、用户界面和应用程序等;gpu用于负责显示屏所需要显示的内容的渲染和绘制;调制解调器用于处理无线通信。可以理解的是,上述调制解调器也可以不集成到处理器1101中,单独通过一块芯片进行实现。

其中,存储器1105可以包括随机存储器(randomaccessmemory,ram),也可以包括只读存储器(read-onlymemory)。可选的,该存储器1105包括非瞬时性计算机可读介质(non-transitorycomputer-readablestoragemedium)。存储器1105可用于存储指令、程序、代码、代码集或指令集。存储器1105可包括存储程序区和存储数据区,其中,存储程序区可存储用于实现操作系统的指令、用于至少一个功能的指令(比如触控功能、声音播放功能、图像播放功能等)、用于实现上述各个方法实施例的指令等;存储数据区可存储上面各个方法实施例中涉及到的数据等。存储器1105可选的还可以是至少一个位于远离前述处理器1101的存储装置。如图11所示,作为一种计算机存储介质的存储器1105中可以包括操作系统、网络通信模块、用户接口模块以及异步调用应用程序。

在图11所示的电子设备1100中,用户接口1103主要用于为用户提供输入的接口,获取用户输入的数据;而处理器1101可以用于调用存储器1105中存储的异步调用应用程序,并具体执行以下操作:

接收目标异步请求,确定所述目标异步请求对应的目标异步接口;其中,所述目标异步接口对应至少两种编程语言的目标服务;

通过所述目标异步接口生成所述目标异步请求对应的目标异步任务,以及将所述目标异步任务投递到任务池;

通过异步线程池中的目标异步线程执行所述任务池中的所述目标异步任务;其中,所述目标异步线程执行所述目标异步任务时调用所述目标服务。

在一个实施例中,处理器1101执行所述接收目标异步请求之前,还用于执行:

获取系统框架的编程语言类型,以及基于所述编程语言类型生成异步接口集合。

在一个实施例中,处理器1101执行所述确定所述目标异步请求对应的目标异步接口时,具体执行:

解析所述目标异步请求确定目标编程语言类型;

基于所述目标编程语言类型在所述异步接口集合中查询对应的目标异步接口。

在一个实施例中,处理器1101执行所述接收目标异步请求之前,还用于执行:

检测任务池和异步线程池是否初始化;

若所述任务池和所述异步线程池未初始化,则获取初始化配置信息;其中,所述初始化配置信息至少包括任务池阈值;

根据所述初始化配置信息对所述任务池和所述异步线程池进行初始化处理。

在一个实施例中,处理器1101执行所述通过所述目标异步接口生成所述目标异步请求对应的目标异步任务时,具体执行:

通过所述目标异步接口将所述目标异步请求的请求体和回调函数封装为对应的目标异步任务;其中,所述回调函数至少包括成功回调函数和失败回调函数。

在一个实施例中,处理器1101执行所述将所述目标异步任务投递到任务池时,具体执行:

判断任务池中的使用量是否小于所述任务池阈值;

若不小于,则对所述目标异步任务进行超时阻塞处理;

在所述任务池中的任务数量小于或等于所述任务池阈值时,将超时阻塞处理的目标异步任务投递到任务池。

在一个实施例中,处理器1101执行所述通过异步线程池中的目标异步线程执行所述任务池中的所述目标异步任务时,具体执行:

确定所述异步线程池中所有异步线程的运行状态;

将所述异步线程池中处于空闲状态的异步线程作为目标异步线程;

通过所述目标异步线程从所述任务池中的取出所述目标异步任务,以及执行所述目标异步任务。

在一个实施例中,处理器1101执行所述执行所述目标异步任务时,具体执行:

通过所述目标异步线程解析所述目标异步任务确定所述目标服务,以及加载所述目标服务;

获取加载结果,以及根据所述加载结果执行所述回调函数。

在一个实施例中,处理器1101执行所述通过异步线程池中的目标异步线程执行所述任务池中的所述目标异步任务之后,还用于执行:

检测当前是否存在超时阻塞处理的异步任务;

若存在,将超时阻塞处理时间最长的异步任务投递到所述任务池。

本申请实施例的技术构思和图2或图3的技术构思相同,具体过程可参照图2或图3的方法实施例,此处不再赘述。

在本申请实施例中,接收目标异步请求,确定所述目标异步请求对应的目标异步接口,其中,所述目标异步接口对应至少两种编程语言的目标服务,通过所述目标异步接口生成所述目标异步请求对应的目标异步任务,以及将所述目标异步任务投递到任务池,通过异步线程池中的目标异步线程执行所述任务池中的所述目标异步任务,其中,所述目标异步线程执行所述目标异步任务时调用所述目标服务。本申请中电子设备通过预先定义不同编程语言对应的目标异步接口,在接收到接收目标异步请求后,可以直接通过对应的目标异步接口保存到任务池中,再通过线程池中的线程可以同时执行多个任务,实现不同编程语言之间在交互时的异步调用,提高了任务处理效率。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体或随机存储记忆体等。

以上所揭露的仅为本申请较佳实施例而已,当然不能以此来限定本申请之权利范围,因此依本申请权利要求所作的等同变化,仍属本申请所涵盖的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1