一种业务处理方法及装置
技术领域
本申请涉及计算机信息处理技术领域,尤其涉及一种业务处理方法及装置。
背景技术
随着计算机技术的发展,并行计算的应用越来越广泛。所谓并行计算是指同时使用多种计算资源解决复杂业务问题的过程。其中,并行计算的基本思想是用多个处理器来协同解决同一业务问题,即将待处理业务问题分解成若干个子业务问题,每一个子业务问题均由一个独立的处理器进行处理。在实际应用中,采用并行计算的方式处理复杂业务问题具备提高业务处理效率的优点。
然而,在并行计算的过程中,如何合理地实现共享内存资源成为一个关键问题。所谓共享内存资源是指一块内存资源可以被不同处理器进行访问。当不同处理器需要访问同一块内存资源时,往往出现多个处理器竞争使用同一块内存资源的现象。
为了避免出现多个处理器竞争使用同一块内存资源的现象,提出采用资源锁的方式实现多个处理器有序使用同一块内存资源。具体地,建立内存资源与资源锁之间的映射关系。当处理器需要使用该内存资源时,需要首先获取该内存资源对应的资源锁,利用资源锁锁定该内存资源,以满足处理器使用该内存资源的需求。
当内存资源被资源锁锁定时,仅有获取到该内存资源对应的资源锁的处理器能够使用该内存资源,其他没有获取到该内存资源对应的资源锁的处理器无法请求使用该内存资源,只能等获取到该内存资源对应的资源锁的处理器释放该内存资源。当该内存资源被释放后,其他没有获取到该内存资源对应的资源锁的处理器可以竞争获取该内存资源对应的资源锁,以便于后续利用资源锁锁定该内存资源并使用该内存资源。
由此可见,当多个处理器采用资源锁的方式竞争使用同一内存资源时,一个处理器利用资源锁锁定内存资源并使用,而其他处理器需要等待内存资源被释放,使得不同处理器之间对资源锁的竞争概率增加,同时不同处理器在访问内存资源时频繁执行资源锁获取操作、加锁操作以及资源锁释放操作,导致系统资源消耗比较大,降低系统处理能力。
发明内容
有鉴于此,本申请实施例提供一种业务处理方法和装置,用于解决现有技术中竞争同一内存资源时出现的资源消耗比较大导致系统的CPU处理能力下降的问题。
一种业务处理方法,包括:
获取待处理业务,其中,所述业务中包含M个子业务,M的取值范围不小于1;
根据所述业务中包含M个子业务,确定用于处理所述业务的内存资源,并将所述内存资源碎片化为至少N个子内存资源块,其中,N不小于M;
基于划分得到的所述至少N个子内存资源块,指示所述M个子业务分别调用不同的所述子内存资源块,以利用调用的所述子内存资源块并行处理所述业务。
一种业务处理设备,包括:
获取单元,用于获取待处理业务,其中,所述业务中包含M个子业务,M的取值范围不小于1;
划分单元,用于根据所述业务中包含M个子业务,确定用于处理所述业务的内存资源,并将所述内存资源碎片化为至少N个子内存资源块,其中,N不小于M;
处理单元,用于基于划分得到的所述至少N个子内存资源块,指示所述M个子业务分别调用不同的所述子内存资源块,以利用调用的所述子内存资源块并行处理所述业务。
有益效果:
本申请实施例提供了一种业务处理方法,获取待处理业务,所述业务中包含M个子业务,M的取值范围不小于1;根据所述业务中包含M个子业务,确定用于处理所述业务的内存资源,并将所述内存资源碎片化为至少N个子内存资源块,N不小于M;基于划分得到的所述至少N个子内存资源块,指示所述M个子业务分别调用不同的所述子内存资源块,以利用调用的所述子内存资源块并行处理所述业务。这样通过将用于处理业务的内存资源碎片化,使得在并行处理业务中包含的每一个子业务时,能够保证每一个子业务快速地获取内存资源块,提高业务处理的效率,同时由于内存资源被碎片化,碎片化的子内存资源块之间将避免内存资源锁竞争关系,降低不同子业务之间竞争内存资源块的概率,进而减少系统CPU资源在等待与唤醒切换线程之间的消耗,提升系统的整体处理能力。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1为本申请实施例提供的一种业务处理方法的结构示意图;
图2为本申请实施例提供的一种业务处理设备的结构示意图。
具体实施方式
为了实现本申请的目的,本申请实施例提供了一种业务处理方法和设备,获取待处理业务,所述业务中包含M个子业务,M的取值范围不小于1;根据所述业务中包含M个子业务,确定用于处理所述业务的内存资源,并将所述内存资源碎片化为至少N个子内存资源块,N不小于M;基于划分得到的所述至少N个子内存资源块,指示所述M个子业务分别调用不同的所述子内存资源块,以利用调用的所述子内存资源块并行处理所述业务。这样通过将用于处理业务的内存资源碎片化,使得在并行处理业务中包含的每一个子业务时,能够保证每一个子业务快速地获取内存资源块,提高业务处理的效率,同时由于内存资源被碎片化,碎片化的子内存资源块之间将避免内存资源锁竞争关系,降低不同子业务之间竞争内存资源块的概率,进而减少系统CPU资源在等待与唤醒切换线程之间的消耗,提升系统的整体处理能力。
下面结合说明书附图对本申请各个实施例作进一步详细描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
图1为本申请实施例提供的一种业务处理方法的流程示意图。所述方法可以如下所述。
步骤101:获取待处理业务。
其中,所述业务中包含M个子业务,M的取值范围不小于1。
在步骤101中,随着计算机功能的增加,对于越来越多的复杂业务采用并行计算的方式进行处理,以提升业务处理的效率。在对复杂业务采用并行计算的方式进行处理时,需要将业务请求拆分成不同的子业务。
在多任务并发执行的系统中,可以为待处理业务配置一个主任务线程,由该主任务线程开启多个子任务线程,每一个子任务线程用于处理待处理业务中的一个子业务,并通过条件计数器在主任务线程中监控和等待子任务线程处理完成,即最后由这些子任务线程并发协助完成对待处理业务的处理。
例如:假设获取到的待处理业务是一个支付业务,该支付业务可以拆分成身份验证子业务、银行账号验证子业务、账户余额查询子业务、以及对方账户身份安全核实子业务等等,那么在获取到该支付业务时,可以为该支付业务配置一个主任务线程,并由该主任务线程开启多个子任务线程,其中一个子任务线程用于处理身份验证子业务和处理银行账号验证子业务,另一个子任务线程用于处理账户余额查询子业务与对方账户身份安全核实子业务。
需要说明的是,在为待处理业务配置个主任务线程时,将该业务的标识信息同步配置给主任务线程,以便于确定该主任务线程所对应的业务,在主任务线程开启子任务线程时,同样地,将该业务的标识同步配置给子任务线程,以便于确定有哪些子任务线程在处理同一个业务。
在本申请实施例中,在获取待处理业务并为其配置主任务线程时,构建一个主任务上下文类(MainContext),以及针对该类实例对象的Hold类(MainContextHolder),同步定义一个规范化的缓存值处理接口(CacheValueHandler)。
其中,构建的MainContext至少具备以下属性:
1、BizId:表示业务请求的标识信息,即表示主任务线程对应的业务;
2、InputContent:表示输入内容,即主任务线程在被执行时,调用方输入的内容信息;
3、fragementCacheMap:表示资源碎片化缓存,即在主任务线程被执行的整个生命周期内,主任务线程开启的每一个子任务线程在处理子业务时获取的资源以碎片化的方式缓存;
4、fragementLockMap:表示资源碎片化的缓存锁,即在缓存每一个子线程任务获取的资源时,缓存锁能够协助资源缓存。
针对构建的MainContext,这里定义至少以下几个函数方法:
1、getBizId函数:该函数用于获取待处理业务的标识信息;
2、getInputCententValue函数:该函数用于根据输入键(inputKey)获取输入内容对应的具体值;
3、getFragmentCacheValue函数:该函数用于根据缓存键(cacheKey)获取碎片化缓存值;
4、getFragmentLock函数:该函数用于根据缓存键获取碎片化缓存对应的锁;
5、updateFragmentCacheValue函数:该函数用于根据缓存键和该缓存的处理器对获取的缓存值进行提取或者更新。
对于定义的缓存值处理接口,主要定义了缓存值的获取或更新函数方法(obtainCacheValue),该接口可以实现由各种缓存信息类型的自行定义,例如:调用会员中心的会员信息;调用资金中心会员的资金信息等等。
针对构建的类实例对象的Hold类,本申请实施例中还可以定义至少两个静态成员属性和五个静态成员方法:
1、Main_Context_Map,属于静态成员属性,用于引用存储MainContext类的实例对象。
2、Current_Main_Content,属于静态成员属性,用于引用当前子任务线程对应的主任务线程MainContext类实例化对象。
3、openMainContext(bizld:string,inputContent:Map),属于静态成员方法,用于构建和初始化MainContext实例化对象,并通过引用存储在Main_Context_Map中。
4、closeMainContext(bizld:string),属于静态成员方法,用于根据参数bizId将存储在Main_Context_Map中包含参数bizId的MainContext实例化对象移除。
5、setCurrentMainContext(Context:MainContext),属于静态成员方法,用于将主任务线程中的MainContext实例化对象设置到子任务线程中,即Current_Main_Content中。
6、getCurrentMainContext(),属于静态成员方法,用于获取当前子任务线程对应的主任务线程MainContext类实例化对象。
7、clearCurrentMainContext(),属于静态成员方法,用于清除当前子任务线程对应的主任务线程MainContext类实例化对象,通常在子任务线程业务执行结束时调用。
步骤102:根据所述业务中包含M个子业务,确定用于处理所述业务的内存资源,并将所述内存资源碎片化为至少N个子内存资源块。
其中,N不小于M。
在步骤102中,对于获取到的待处理业务,确定用于执行该业务的主任务线程,并由该主任务线程通过MainContextHolder类的openMain Context方法构建一个属于该主任务线程的MainContext对象,同时确定用于处理该业务的内存资源。
在本申请的另一个实施例中,将所述内存资源划分成至少N个子内存资源,包括:
计算所述业务所需要调用外围服务资源名称的数量以及调用外围服务资源时请求参数所取值的数量的笛卡尔积的和值,并根据所述和值确定N的大小;
按照所述N的大小,将所述内存资源划分成至少N个子内存资源块。
由于获取到的待处理业务所包含的子业务的个数不确定,有些业务请求中包含的子业务个数比较多,有些业务请求中包含的子业务个数比较少,那么在划分子内存资源块时并不保证每一个子业务对应一个子内存资源块,而是各个子业务共享所配置的内存资源块,那么在本申请实施例中,所述方法还包括:
在将所述内存资源划分成至少N个子内存资源块时,为划分得到的每一个所述子内存资源块配置资源锁;
针对每一个所述子内存资源块,建立所述资源锁与所述子内存资源块之间的对应关系。
本申请实施例中所述资源锁与所述子内存资源块之间的对应关系可以以键值方式存储,也可以采用其他方式存储,这里不做具体限定。
这样,在各个子业务执行过程中,通过获取资源锁,达到优先使用该资源锁对应的子内存资源块的目的。
步骤103:基于划分得到的所述至少N个子内存资源块,指示所述M个子业务分别调用不同的所述子内存资源块,以利用调用的所述子内存资源块并行处理所述业务。
在步骤103中,基于划分得到的所述至少N个子内存资源块,确定每一个所述子内存资源块的属性,其中,所述子内存资源块的属性根据所述业务所需要请求的外围服务资源标识和请求参数确定的;
针对所述M个子任务中的其中一个子任务,执行以下操作:
根据所述子任务所需要请求的外围服务资源标识,指示所述子任务调用属性与所述子任务所需要请求的外围服务资源标识相匹配的子内存资源块,以利用所述子内存资源块为所述子任务服务。
具体地,根据所述子业务中包含的待调用的外围资源服务内容、请求参数及所述外围服务资源标识生成一个key,选择属性与所述key相匹配的所述子内存资源块;
根据选择的所述子内存资源块的属性,指示所述子业务调用选择的所述子内存资源块的资源内容。
在子任务线程处理子业务的过程中调用子内存资源块,一般包含获取子内存资源块的资源内容,还包含对调用的子内存资源块的资源内容进行更新。
具体地,根据选择的所述子内存资源的属性,确定选择的所述子内存资源块的资源内容;
在确定选择的所述子内存资源块的资源内容存在且不需要更新时,指示所述子业务调用选择的所述子内存资源块的资源内容;
在确定选择的所述子内存资源块的资源内容不存在或需要更新时,指示选择的所述子业务获取与所述子内存资源块对应的资源锁,并利用所述资源锁,对选择的所述子内存资源块的资源内容执行更新操作。
在本申请的另一个实施例中,所述方法还包括:
在对选择的所述子内存资源块的资源内容执行更新操作后,释放获取的与所述子内存资源块对应的资源锁。
在子任务线程调用子内存资源块时,可以通过步骤101中记载的Hold类静态成员方法获取/更新子内存资源块的资源内容,也可以通过其他方式获取/更新,这里不做具体限定。
在本申请实施例中,对于子任务线程获取子内存资源块对应的资源锁的方式可以包括但不限于以下方式:
第一步,确定选择的子内存资源块是否存在资源锁,若存在,则执行第二步;否则,执行第三步。
第二步,根据子内存资源块与资源锁之间的对应关系,获取选择的子内存资源块对应的资源锁。
第三步,等待并再次执行第一步,在结果是存在时,跳转执行第二步。
通过本申请实施例提供的技术方案,获取待处理业务,所述业务中包含M个子业务,M的取值范围不小于1;根据所述业务中包含M个子业务,确定用于处理所述业务的内存资源,并将所述内存资源碎片化为至少N个子内存资源块,N不小于M;基于划分得到的所述至少N个子内存资源块,指示所述M个子业务分别调用不同的所述子内存资源块,以利用调用的所述子内存资源块并行处理所述业务。这样通过将用于处理业务的内存资源碎片化,使得在并行处理业务中包含的每一个子业务时,能够保证每一个子业务快速地获取内存资源块,提高业务处理的效率,同时由于内存资源被碎片化,碎片化的子内存资源块之间将避免内存资源锁竞争关系,降低不同子业务之间竞争内存资源块的概率,进而减少系统CPU资源在等待与唤醒切换线程之间的消耗,提升系统的整体处理能力。
图2为本申请实施例提供的一种业务处理设备的结构示意图。所述业务处理设备可以包含:获取单元21、划分单元22和处理单元23,其中:
获取单元21,用于获取待处理业务,其中,所述业务中包含M个子业务,M的取值范围不小于1;
划分单元22,用于根据所述业务中包含M个子业务,确定用于处理所述业务的内存资源,并将所述内存资源碎片化为至少N个子内存资源块,其中,N不小于M;
处理单元23,用于基于划分得到的所述至少N个子内存资源块,指示所述M个子业务分别调用不同的所述子内存资源块,以利用调用的所述子内存资源块并行处理所述业务。
在本申请的另一个实施例中,所述业务处理设备还包括:建立单元24,其中:
所述建立单元24,用于在将所述内存资源碎片化为至少N个子内存资源块时,为划分得到的每一个所述子内存资源块配置资源锁;
针对每一个所述子内存资源块,建立所述资源锁与所述子内存资源块之间的对应关系。
在本申请的另一个实施例中,所述处理单元23基于划分得到的所述至少N个子内存资源,指示所述M个子业务分别调用不同的所述子内存资源块,包括:
基于划分得到的所述至少N个子内存资源块,确定每一个所述子内存资源块的属性,其中,所述子内存资源块的属性根据所述业务所需要请求的外围服务资源标识和请求参数确定的;
针对所述M个子任务中的其中一个子任务,执行以下操作:
根据所述子任务所需要请求的外围服务资源标识,指示所述子任务调用属性与所述子任务所需要请求的外围服务资源标识相匹配的子内存资源块,以利用所述子内存资源块为所述子任务服务。
在本申请的另一个实施例中,所述处理单元23根据所述子任务所需要请求的外围服务资源标识,指示所述子任务调用属性与所述子任务所需要请求的外围服务资源标识相匹配的子内存资源块,包括:
根据所述子业务中包含的待调用的外围资源服务内容、请求参数及所述外围服务资源标识生成一个key,选择属性与所述key相匹配的所述子内存资源块;
根据选择的所述子内存资源块的属性,指示所述子业务调用选择的所述子内存资源块的资源内容。
在本申请的另一个实施例中,所述处理单元23根据选择的所述子内存资源块的属性,指示所述子业务调用选择的所述子内存资源块的资源内容,包括:
根据选择的所述子内存资源的属性,确定选择的所述子内存资源块的资源内容;
在确定选择的所述子内存资源块的资源内容存在且不需要更新时,指示所述子业务调用选择的所述子内存资源块的资源内容;
在确定选择的所述子内存资源块的资源内容不存在或需要更新时,指示选择的所述子业务获取与所述子内存资源块对应的资源锁,并利用所述资源锁,对选择的所述子内存资源块的资源内容执行更新操作。
在本申请的另一个实施例中,所述业务处理设备还包括:释放单元25,其中:
所述释放单元25,用于在对选择的所述子内存资源块的资源内容执行更新操作后,释放获取的与所述子内存资源块对应的资源锁。
在本申请的另一个实施例中,所述划分单元22将所述内存资源划分成至少N个子内存资源块,包括:
计算所述业务所需要调用外围服务资源名称的数量以及调用外围服务资源时请求参数所取值的数量的笛卡尔积的和值,并根据所述和值确定N的大小;
按照所述N的大小,将所述内存资源划分成至少N个子内存资源块。
需要说明的是,本申请实施例中所述的业务处理设备可以通过软件方式实现,也可以通过硬件方式实现,这里不做限定。
业务处理设备通过将用于处理业务的内存资源碎片化,使得在并行处理业务中包含的每一个子业务时,能够保证每一个子业务快速地获取内存资源块,提高业务处理的效率,同时由于内存资源被碎片化,碎片化的子内存资源块之间将避免内存资源锁竞争关系,降低不同子业务之间竞争内存资源块的概率,进而减少系统CPU资源在等待与唤醒切换线程之间的消耗,提升系统的整体处理能力。
本领域的技术人员应明白,本申请的实施例可提供为方法、装置(设备)、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、装置(设备)和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。