用于处理事务的方法、装置、设备及可读存储介质
技术领域
本申请实施例涉及多线程技术领域,尤其涉及事务处理技术领域。
背景技术
事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begintransaction和end transaction语句(或函数调用)来界定。事务由事务开始(begintransaction)和事务结束(end transaction)之间执行的全体操作组成。
现有技术提供了一种通过串行的方式来依次执行事务开始至事务结束的所有操作的事务处理方式。
发明内容
本申请实施例提出了一种用于处理事务的方法、装置、电子设备及计算机可读存储介质。
第一方面,本申请实施例提出了一种用于处理事务的方法,包括:将待处理事务拆分为多个子事务,并选用与子事务数量一致的多个目标子线程来并行处理各子事务;控制子事务执行成功的目标子线程处于等待状态、控制子事务执行失败的目标子线程重复执行对应的子事务;当重复执行的子事务在满足预设条件的情况下被成功执行时,生成待处理事务并行处理成功的信号。
在一些实施例中,该用于处理事务的方法还包括:当重复执行的子事务在满足预设条件的情况下仍未被成功执行时,生成待处理事务并行处理失败的信号。
在一些实施例中,该用于处理事务的方法还包括:当存在与待处理事务对应的替代事务时,利用各目标子线程并行处理替代事务拆分出的各替代子事务;当任意替代子事务执行失败时,生成待处理事务的替代事务并行处理失败的信号;当所有替代子事务均执行成功时,生成待处理事务的替代事务并行处理成功的信号。
在一些实施例中,该用于处理事务的方法还包括:统计预设时间段内待处理事务和对应的替代事务的执行成功率;根据执行成功率调整待处理事务和对应的替代事务的执行优先级。
在一些实施例中,预设条件包括不超过预设最大重复执行次数、不超过预设最大重复执行耗时、不超过预设最大连续执行失败次数中的至少一项。
在一些实施例中,选用与子事务数量一致的目标子线程来并行处理各子事务,包括:确定子事务的第一数量;从存储有可重复利用子线程的预设线程池中选取出第一数量的目标子线程;将第一数量的子事务通过预设线程池一一提交至第一数量的目标子线程;当各目标子线程均成功接收到对应的子事务时,控制各目标子线程并行处理对应的子事务。
第二方面,本申请实施例提出了一种用于处理事务的装置,包括:事务拆分及并行处理单元,被配置成将待处理事务拆分为多个子事务,并选用与子事务数量一致的多个目标子线程来并行处理各子事务;等待及重复执行单元,被配置成控制子事务执行成功的目标子线程处于等待状态、控制子事务执行失败的目标子线程重复执行对应的子事务;并行处理成功单元,被配置成当重复执行的子事务在满足预设条件的情况下被成功执行时,生成待处理事务并行处理成功的信号。
在一些实施例中,该用于处理事务的装置还包括:并行处理失败单元,被配置成当重复执行的子事务在满足预设条件的情况下仍未被成功执行时,生成待处理事务并行处理失败的信号。
在一些实施例中,该用于处理事务的装置还包括:替代事务更换单元,被配置成当存在与待处理事务对应的替代事务时,利用各目标子线程并行处理替代事务拆分出的各替代子事务;替代事务并行处理失败单元,被配置成当任意替代子事务执行失败时,生成待处理事务的替代事务并行处理失败的信号;替代事务并行处理成功单元,被配置成当所有替代子事务均执行成功时,生成待处理事务的替代事务并行处理成功的信号。
在一些实施例中,该用于处理事务的装置还包括:执行成功率统计单元,被配置成统计预设时间段内待处理事务和对应的替代事务的执行成功率;执行优先级调整单元,被配置成根据执行成功率调整待处理事务和对应的替代事务的执行优先级。
在一些实施例中,预设条件包括不超过预设最大重复执行次数、不超过预设最大重复执行耗时、不超过预设最大连续执行失败次数中的至少一项。
在一些实施例中,事务拆分及并行处理单元进一步被配置成:确定子事务的第一数量;从存储有可重复利用子线程的预设线程池中选取出第一数量的目标子线程;将第一数量的子事务通过预设线程池一一提交至第一数量的目标子线程;当各目标子线程均成功接收到对应的子事务时,控制各目标子线程并行处理对应的子事务。
第三方面,本申请实施例提供了一种电子设备,该电子设备包括:至少一个处理器;以及与至少一个处理器通信连接的存储器;其中,存储器存储有可被至少一个处理器执行的指令,该指令被至少一个处理器执行,以使至少一个处理器执行时能够实现如第一方面中任一实现方式描述的用于处理事务的方法。
第四方面,本申请实施例提供了一种存储有计算机指令的非瞬时计算机可读存储介质,该计算机指令用于使计算机执行时能够实现如第一方面中任一实现方式描述的用于处理事务的方法。
本申请实施例提供的用于处理事务的方法、装置、电子设备及计算机可读存储介质,首先,将待处理事务拆分为多个子事务,并选用与子事务数量一致的多个目标子线程来并行处理各子事务;然后,控制子事务执行成功的目标子线程处于等待状态、控制子事务执行失败的目标子线程重复执行对应的子事务;最后,当重复执行的子事务在满足预设条件的情况下被成功执行时,生成待处理事务并行处理成功的信号。本申请通过上述技术方案提供了一种针对事务的多线程并行处理方式,在主线程的协调下,可将待处理事务拆分为多个子事务,并对应提交至多个子线程来并行执行,而通过仅使执行失败的子线程进行重试,可减少对运算资源的消耗,提升性能。
应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1是本申请可以应用于其中的示例性系统架构;
图2是根据本申请的用于处理事务的方法的一个实施例的流程图;
图3是图2实施例中一种选用与子事务数量一致的多个目标子线程来并行处理各子事务的方法的流程图;
图4是根据本申请的用于处理事务的方法的另一个实施例的流程图;
图5是根据本申请的用于处理事务的方法的一个应用场景的流程图;
图6是根据本申请的用于处理事务的装置的一个实施例的结构示意图;
图7是适用于实现本申请实施例的用于处理事务的方法的电子设备的框图。
具体实施方式
下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与有关发明相关的部分。
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
图1示出了可以应用本申请的用于处理事务的方法、装置、电子设备及计算机可读存储介质的实施例的示例性系统架构100。
如图1所示,系统架构100可以包括终端设备101、102、103,网络104和服务器105。网络104用以在终端设备101、102、103和服务器105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备101、102、103通过网络104与服务器105交互,以接收或发送消息等。终端设备101、102、103和服务器105上可以安装有各种用于实现两者之间进行信息通讯的应用,例如事务处理类应用、事务数据传输类应用、即时通讯类应用等。
终端设备101、102、103和服务器105可以是硬件,也可以是软件。当终端设备101、102、103为硬件时,可以是具有显示屏的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等;当终端设备101、102、103为软件时,可以安装在上述所列举的电子设备中,其可以实现成多个软件或软件模块(例如可以根据用户输入的信息生成对应的待处理事务),也可以实现成单个软件或软件模块,在此不做具体限定。当服务器105为硬件时,可以实现成多个服务器组成的分布式服务器集群,也可以实现成单个服务器;服务器为软件时,可以实现成多个软件或软件模块(例如用于来提供针对待处理事务的多线程并行处理服务),也可以实现成单个软件或软件模块,在此不做具体限定。
服务器105通过内置的各种应用可以提供各种服务,以可以提供针对待处理事务的多线程并行处理服务的事务处理类应用为例,服务器105在运行该事务处理类应用时可实现如下效果:首先,接收终端设备101、102、103通过网络104发来的待处理任务,然后,将待处理事务拆分为多个子事务,并选用与这些子事务数量一致的多个目标子线程来并行处理各子事务;接着,控制子事务执行成功的目标子线程处于等待状态、控制子事务执行失败的目标子线程重复执行对应的子事务;最后,当重复执行的子事务在满足预设条件的情况下被成功执行时,生成该待处理事务并行处理成功的信号。即服务器105通过上述处理步骤将传入的待处理事务按照预设的多线程并行处理方式进行处理,并将处理结果输出。
需要指出的是,待处理事务除可以从终端设备101、102、103接收到之外,也可以通过各种方式预先存储在服务器105本地。因此,当服务器105检测到本地已经存储有待处理事务的相关信息时(例如待处理事务队列中还记录有未处理的待处理事务),可选择直接从本地获取这些数据,在此种情况下,示例性系统架构100也可以不包括终端设备101、102、103和网络104。
本申请后续各实施例所提供的用于处理事务的方法一般由服务器105来执行,相应地,用于处理事务的装置一般也设置于服务器105中。但同时也需要指出的是,在某些特殊情况下,也可以让终端设备101、102、103通过其上安装的事务处理类应用来执行用于处理事务的方法,进而输出与服务器105同样的结果。尤其是在同时存在多种具有不同运算能力的终端设备的情况下,但事务处理类应用判断所在的终端设备拥有较强的运算能力和剩余较多的运算资源时,可以让终端设备来执行上述运算,从而适当减轻服务器105的运算压力,相应的,用于处理事务的装置也可以设置于终端设备101、102、103中。在此种情况下,示例性系统架构100也可以不包括服务器105和网络104。
应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
继续参考图2,其示出了根据本申请的用于处理事务的方法的一个实施例的实现流程200,包括以下步骤:
步骤201:将待处理事务拆分为多个子事务,并选用与子事务数量一致的多个目标子线程来并行处理各子事务;
本步骤旨在由用于处理事务的方法的执行主体(例如图1所示的服务器105或服务器105中负责以多线程方式处理事务的主线程)将接收到的完整的待处理事务拆分为多个子事务,并选用与子事务数量一致的多个目标子线程来并行处理各子事务。
需要指出的是,包括待处理事务在内的相关信息可以由上述执行主体直接从本地的存储设备获取,也可以接收自非本地的存储设备(例如图1所示的终端设备101、102、103)。本地的存储设备可以是设置在上述执行主体内的一个数据存储模块,例如服务器硬盘,在此种情况下,包括待处理事务在内的相关信息可以在本地快速读取到;非本地的存储设备还可以为其它任何被设置用于存储数据的电子设备,例如一些用户终端等,在此情况下,上述执行主体可以通过接收该电子设备主动发来的包括待处理事务在内的相关信息来获取到待处理事务。
其中,待处理事务拆分出的多个子事务之间通常是不存在依赖关系的,因为如果存在依赖关系,就无法按照并行的方式去执行,而只能按照依赖关系串行执行。该目标子线程可以是根据拆分出的多个子事务实时创建的,也可以是预先创建好的处于空闲状态的线程,还可以进一步的创建一个线程池来存储一些可重复利用的线程,以便后续根据实际需求灵活选用。
一种包括但不限于的实现方式可参见如图3所示的流程300,包括如下步骤:
步骤301:将待处理事务拆分为多个子事务,并确定子事务的第一数量;
步骤302:从存储有可重复利用子线程的预设线程池中选取出第一数量的目标子线程;
其中,在本实施例中预先创建有多个可重复利用的子线程,并使用线程池来统一存储、管理和调度这些子线程。
本步骤旨在由上述执行主体从该预设线程池中选取出与子事务数量相同的目标子线程,以使每个子事务均有对应的目标子线程来负责执行。
其中,预设线程池中的子线程并非全处于空闲状态,而目标子线程则均为处于空闲状态的子线程。当各空闲子线程之间不存在差异时,从所有空闲子线程中选取出第一数量的目标子线程可以通过随机选取来实现,也可以按照一定的顺序进行选取来实现;当各空闲子线程之间存在诸如类型、最大负载量等预设差异时,也可以将其中最适合当前子事务的相关属性的子线程选取为目标子线程。
进一步的,当预设线程池中不存在第一数量的空闲子线程时,可以因不满足并行执行条件直接生成待处理事务并行处理失败的信号,也可以等待预设时长,以判断是否能够通过较短时间的等待使得空闲子线程的数量恢复至大于或等于第一数量。
步骤303:将第一数量的子事务通过预设线程池一一提交至第一数量的目标子线程;
在步骤302的基础上,本步骤旨在由上述执行主体将第一数量的子事务通过预设线程池一一提交至第一数量的目标子线程。
步骤304:判断各目标子线程是否均成功接收到对应的子事务,若均成功,执行步骤305,否则执行步骤306;
在步骤303的基础上,本步骤旨在由上述执行主体对所有目标子线程是否都成功接收到了对应的子事务进行判断,因为只有所有目标子线程都成功接收到了对应的子事务,才算满足并行执行的基础条件。
其中,考虑到不同子事务之间存在的差异可能导致其被对应目标子线程接收到的耗时不一致,因此在得到本步骤的判断结果之前还可以设置一个等待时间,即以超过该等待时间之后的判断结果作为最终判断结果,以减少得到错误判断结果的可能性。
步骤305:控制各目标子线程并行处理对应的子事务;
本步骤建立在步骤304的判断结果为各目标子线程均成功接收到对应的子事务的基础上,说明构成待处理事务的所有子事务均成功被对应的目标子线程成功接收到,每个目标子线程也均得知其后续应负责执行的子事务,因此将由上述执行主体控制各目标子线程开始并行处理对应的子事务,直至所有目标子线程的子事务均成功执行或任意目标子线程的子事务执行失败。
步骤306:生成待处理事务并行处理失败的信号。
本步骤建立在步骤304的判断结果为任意目标子线程未能够成功执行其对应的子事务的情况下,由于子事务拆分自待处理事务,因此必须所有子事务均被成功执行,才能够得到与直接执行待处理事务相同的结果。因此,本步骤将由上述执行主体生成待处理事务并行处理失败的信号。
进一步的,为了尽可能的降低因偶然性因素导致得到待处理事务并行处理失败的结果的几率,可以再次尝试向子事务提交失败的目标子线程执行对应子事务提交操作,甚至在某些特殊场景下还可以尝试更换其它空闲子线程替代当前出现提交失败的目标子线程。
为了尽可能的避免无效操作,本实施例提供的如图3所示的流程300将控制多个目标子线程并行执行多个子事务的过程进行了改进,新增了对所有子事务是否均成功提交至对应的目标子线程的判断,以便在得到所有子事务未能够全部成功提交至对应的目标子线程的情况下,无需执行后续步骤,从而避免无效运算的产生。
步骤202:控制子事务执行成功的目标子线程处于等待状态、控制子事务执行失败的目标子线程重复执行对应的子事务;
在步骤201的基础上,本步骤旨在由上述执行主体控制子事务执行成功的目标子线程处于等待状态、控制子事务执行失败的目标子线程重复执行对应的子事务。控制子事务执行失败的目标子线程重复执行对应的子事务,是为了验证该目标子线程对其子事务执行失败的原因是否为偶然性因素,而控制子事务执行成功的目标子线程处于等待状态则在实现减少运算量的同时,还可以尽量避免这些目标子线程因偶然性因素在重复执行时反而出现之前没出现过的执行失败的问题。
步骤203:当重复执行的子事务在满足预设条件的情况下被成功执行时,生成待处理事务并行处理成功的信号。
本步骤建立在重复执行的子事务在满足预设条件的情况下被成功执行的基础上,具体可通过对重复执行的子事务是否在满足预设条件的情况下被成功执行的判断操作来确定是否进入该分支,并在判断操作的结果为在满足预设条件的情况下被成功执行时,由上述执行主体根据构成待处理事务的所有子事务均被对应的目标子线程成功执行的结果生成待处理事务并行处理成功的信号。
由于本申请控制子事务执行失败的目标子线程重复执行对应的子事务的目的为验证导致执行失败的是否为偶然性因素,因此该预设条件可以包括且不限于的表现为:不超过预设最大重复执行次数、不超过预设最大重复执行耗时、不超过预设最大连续执行失败次数中的至少一项。
本申请实施例提供的用于处理事务的方法,将待处理事务拆分为多个子事务,并选用与子事务数量一致的多个目标子线程来并行处理各子事务;控制子事务执行成功的目标子线程处于等待状态、控制子事务执行失败的目标子线程重复执行对应的子事务;当重复执行的子事务在满足预设条件的情况下被成功执行时,生成待处理事务并行处理成功的信号。本申请通过上述技术方案提供了一种针对事务的多线程并行处理方式,在主线程的协调下,可将待处理事务拆分为多个子事务,并对应提交至多个子线程来并行执行,而通过仅使执行失败的子线程进行重试,可减少对运算资源的消耗,提升性能。
在上述实施例的基础上,本申请还通过图4提供了另一种用于处理事务的方法的流程400,包括如下步骤:
步骤401:将待处理事务拆分为多个子事务,并选用与子事务数量一致的多个目标子线程来并行处理各子事务;
步骤402:控制子事务执行成功的目标子线程处于等待状态、控制子事务执行失败的目标子线程重复执行对应的子事务;
以上步骤401-402与如图2所示的步骤201-202一致,相同部分内容请参见上一实施例的相应部分,此处不再进行赘述。
步骤403:判断重复执行的子事务是否在满足预设条件的情况下被成功执行,若是,执行步骤407,否则执行步骤404;
步骤404:判断是否存在待处理事务的替代事务,若存在,执行步骤405,否则执行步骤408;
本步骤建立在步骤403的判断结果为重复执行的子事务在满足预设条件的情况下未被成功执行的基础上,为了尽可能的实现与成功执行待处理事务一致或类似的效果,本步骤旨在由上述执行主体对是否存在待处理事务的替代事务进行判断。需要说明的是,该替代事务通常是由发起待处理事务的用户一并预先给出,但在特殊情况下,也可以由上述执行主体根据待处理事务的实现效果自行在存储空间寻找到预先设置好的替代解决方案,是否可执行这种方式也可以预先向发起待处理事务的用户进行授权问询。
步骤405:利用各目标子线程并行处理替代事务拆分出的各替代子事务;
本步骤建立在步骤404的判断结果为存在待处理事务的替代事务的基础上,旨在由上述执行主体在将替代事务拆分为多个替代子事务后,利用各目标子线程来并行处理各替代子事务。
当替代事务拆分出的替代子事务的数量与待处理事务拆分出的子事务的数量一致时,相当于将各目标子线程的处理事务由子事务更换为替代子事务;当替代事务拆分出的替代子事务的数量小于待处理事务拆分出的子事务的数量时,则可以将相应数量的目标子线程的状态置为空闲状态放置于线程池,剩余部分通过事务更换即可;当替代事务拆分出的替代子事务的数量大于待处理事务拆分出的子事务的数量时,也可以从预设线程池中再选取出与缺少数量的相应的空闲子线程来补足。
步骤406:判断是否有任意替代子事务执行失败,若是,执行步骤408,否则执行步骤407;
在步骤405的基础上,本步骤旨在判断是否有任意替代子事务执行失败,从而根据判断结果来确定替代事务的执行情况。
步骤407:生成待处理事务并行处理成功的信号;
本步骤建立在步骤403的判断结果为重复执行的子事务在满足预设条件的情况下被成功执行,和步骤406的判断结果为所有替代子事务均执行成功的基础上,因此在待处理事务或待处理事务的替代事务成功执行时,将统一生成待处理事务并行处理成功的信号。当然,为了尽可能的明确成功的事务,也可以针对待处理事务的替代事务成功执行时的情况生成待处理事务的替代事务并行处理成功的信号。
进一步的,还可以统计预设时间段内待处理事务和对应的替代事务的执行成功率,并根据执行成功率调整待处理事务和对应的替代事务的执行优先级,例如将较高执行成功率的替代事务替代较低执行成功率的待处理事务,以实现整体较高的一次执行成功率。
步骤408:生成待处理事务并行处理失败的信号。
本步骤建立在步骤404的判断结果为不存在替代事务,和步骤406的判断结果为有任意替代子事务执行失败的基础上,因此在不存在替代事务或待处理事务的替代事务未成功执行时,将统一生成待处理事务并行处理失败的信号。当然,为了尽可能的明确失败的事务,也可以针对待处理事务的替代事务执行失败时的情况生成待处理事务的替代事务并行处理失败的信号。
在上述实施例提供技术方案所具有的有益效果的基础上,本实施例针对经重复执行仍未使得子事务成功执行的情况,还提供了一种试图通过执行存在的替代事务来实现与待处理事务一致或类似的效果,从而让事务处理操作成功收尾的方案。本实施例通过增加的部分技术方案可以尽可能的增加待处理事务的处理成功率。
上述实施例针对当子事务执行失败的目标子线程无法通过重复执行的方式来执行成功的情况,给出了将更换为与待处理事务对应的替代事务的替代方案,若直接存在与某个子事务对应的替代子事务时,也可以仅对某个子事务替换为相应的替代子事务,而无需更换其它目标子线程已执行成功的子事务,即只需要控制已成功执行相应子事务的目标子线程等待更换为替代子事务的目标子线程即可,尽可能的节省运算量。
需要单独指出的是,无论是通过重复执行还是转而执行替代事务,均是为了尽可能的达成与成功处理待处理事务一致或类似的效果,上述实施例将转而执行替代事务的技术方案的执行建立在重复执行方案无法解决问题的情况下,但其实两者之间并不存在明显的因果或依赖关系,因此实际上两者的执行顺序也可以更换,可根据实际应用场景下所有可能存在的特殊要求灵活调整,此处不做具体限定。
为加深理解,本申请还结合一个具体应用场景,给出了一种具体的实现方案,该应用场景将用户发起的待处理事务作为一个任务,并将其拆分为三个任务,在本实施例中,执行主体为负责处理事务的服务器的主流程线程,具体流程请参见如图5所示的时序图:
首先,主流程线程会把用户提交过来的以函数式参数表示的事务转换成可识别、可运行的任务,并把任务拆分为多个子任务后提交到线程池;
其中,因为线程池中可同时运行的线程数量还是等待队列中的线程数量都是有限的,所以不能让等待队列的长度无线增大否则会耗尽服务器的内存。所以在高并发等极端场景下等待队列的线程数量达到预设的最大值时会出现提交任务失败。一旦有任务提交失败,则在同步阶段等待或者在接收到还未到达同步阶段的线程返回的提交失败消息时就直接使所有子线程直接进行返回失败,接着主流程线程接收到子线程失败后也直接返回给发起事务的用户一个失败信号;
接着,在所有子线程均提交成功后,主流程线程将会等待线程池统筹各子线程来实现并发执行,从第一个子任务被调度执行开始,进入执行的线程会等待其他的子线程被调度,当所有的子线程被均被调度后则开始同时执行。等待时会等待预先设置的时长,若在超过该预先设置的时长后仍有子线程未被调度执行,则直接返回因为等待超时的执行失败结果。这是因为不能无限制的等待下去,否则可能因为一些极端情况出现级联失败造成整个服务器崩溃;若所有子线程均被线程池调度达到满足并行执行的状态时,将先检查有没有超时,如果没有超时则开启让所有的线程开始同时执行。
然后,先执行完的子线程则再次进入等待和同步其它子线程运行结果的状态,进入之前还会检查有没有超时或者子线程运行出现问题,如果有则不等待直接回滚操作(即重复执行),等待时间依旧是提前设置好的时长,若等待超过提前设置好的时长则正在等待的子线程直接进行回滚操作消除刚才操作的数据,并告诉未执行完的子线程执行完毕后直接进行回滚,然后根据回滚操作的结果返回给主流程线程,以便主流程线程根据接收到的结果向任务发起的用户进行结果反馈。
进一步参考图6,作为对上述各图所示方法的实现,本申请提供了一种用于处理事务的装置的一个实施例,该装置实施例与图2所示的方法实施例相对应,该装置具体可以应用于各种电子设备中。
如图6所示,本实施例的用于处理事务的装置600可以包括:事务拆分及并行处理单元601、等待及重复执行单元602、并行处理成功单元603。其中,事务拆分及并行处理单元601,被配置成将待处理事务拆分为多个子事务,并选用与子事务数量一致的多个目标子线程来并行处理各子事务;等待及重复执行单元602,被配置成控制子事务执行成功的目标子线程处于等待状态、控制子事务执行失败的目标子线程重复执行对应的子事务;并行处理成功单元603,被配置成当重复执行的子事务在满足预设条件的情况下被成功执行时,生成待处理事务并行处理成功的信号。
在本实施例中,用于处理事务的装置600中:事务拆分及并行处理单元601、等待及重复执行单元602、并行处理成功单元603的具体处理及其所带来的技术效果可分别参考图2对应实施例中的步骤201-203的相关说明,在此不再赘述。
在本实施例的一些可选的实现方式中,该用于处理事务的装置600还可以包括:并行处理失败单元,被配置成当重复执行的子事务在满足预设条件的情况下仍未被成功执行时,生成待处理事务并行处理失败的信号。
在本实施例的一些可选的实现方式中,该用于处理事务的装置600还可以包括:替代事务更换单元,被配置成当存在与待处理事务对应的替代事务时,利用各目标子线程并行处理替代事务拆分出的各替代子事务;替代事务并行处理失败单元,被配置成当任意替代子事务执行失败时,生成待处理事务的替代事务并行处理失败的信号;替代事务并行处理成功单元,被配置成当所有替代子事务均执行成功时,生成待处理事务的替代事务并行处理成功的信号。
在本实施例的一些可选的实现方式中,该用于处理事务的装置600还可以包括:执行成功率统计单元,被配置成统计预设时间段内待处理事务和对应的替代事务的执行成功率;执行优先级调整单元,被配置成根据执行成功率调整待处理事务和对应的替代事务的执行优先级。
在本实施例的一些可选的实现方式中,预设条件包括不超过预设最大重复执行次数、不超过预设最大重复执行耗时、不超过预设最大连续执行失败次数中的至少一项。
在本实施例的一些可选的实现方式中,事务拆分及并行处理单元601可以进一步被配置成:确定子事务的第一数量;从存储有可重复利用子线程的预设线程池中选取出第一数量的目标子线程;将第一数量的子事务通过预设线程池一一提交至第一数量的目标子线程;当各目标子线程均成功接收到对应的子事务时,控制各目标子线程并行处理对应的子事务。
本实施例作为对应于上述方法实施例的装置实施例存在,本实施例提供的用于处理事务的装置通过上述技术方案提供了一种针对事务的多线程并行处理方式,在主线程的协调下,可将待处理事务拆分为多个子事务,并对应提交至多个子线程来并行执行,而通过仅使执行失败的子线程进行重试,可减少对运算资源的消耗,提升性能。
根据本申请的实施例,本申请还提供了一种电子设备和一种计算机可读存储介质。
图7示出了一种适于用来实现本申请实施例的用于处理事务的方法的电子设备的框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本申请的实现。
如图7所示,该电子设备包括:一个或多个处理器701、存储器702,以及用于连接各部件的接口,包括高速接口和低速接口。各个部件利用不同的总线互相连接,并且可以被安装在公共主板上或者根据需要以其它方式安装。处理器可以对在电子设备内执行的指令进行处理,包括存储在存储器中或者存储器上以在外部输入/输出装置(诸如,耦合至接口的显示设备)上显示GUI的图形信息的指令。在其它实施方式中,若需要,可以将多个处理器和/或多条总线与多个存储器和多个存储器一起使用。同样,可以连接多个电子设备,各个设备提供部分必要的操作(例如,作为服务器阵列、一组刀片式服务器、或者多处理器系统)。图7中以一个处理器701为例。
存储器702即为本申请所提供的非瞬时计算机可读存储介质。其中,存储器存储有可由至少一个处理器执行的指令,以使至少一个处理器执行本申请所提供的用于处理事务的方法。本申请的非瞬时计算机可读存储介质存储计算机指令,该计算机指令用于使计算机执行本申请所提供的用于处理事务的方法。
存储器702作为一种非瞬时计算机可读存储介质,可用于存储非瞬时软件程序、非瞬时计算机可执行程序以及模块,如本申请实施例中的用于处理事务的方法对应的程序指令/模块(例如,附图6所示的事务拆分及并行处理单元601、等待及重复执行单元602、并行处理成功单元603)。处理器701通过运行存储在存储器702中的非瞬时软件程序、指令以及模块,从而执行服务器的各种功能应用以及数据处理,即实现上述方法实施例中的用于处理事务的方法。
存储器702可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储该电子设备在执行用于处理事务的方法所创建的各类数据等。此外,存储器702可以包括高速随机存取存储器,还可以包括非瞬时存储器,例如至少一个磁盘存储器件、闪存器件、或其他非瞬时固态存储器件。在一些实施例中,存储器702可选包括相对于处理器701远程设置的存储器,这些远程存储器可以通过网络连接至适用于执行用于处理事务的方法的电子设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
适用于执行用于处理事务的方法的电子设备还可以包括:输入装置703和输出装置704。处理器701、存储器702、输入装置703和输出装置704可以通过总线或者其他方式连接,图7中以通过总线连接为例。
输入装置703可接收输入的数字或字符信息,以及产生适用于执行用于处理事务的方法的电子设备的用户设置以及功能控制有关的键信号输入,例如触摸屏、小键盘、鼠标、轨迹板、触摸板、指示杆、一个或者多个鼠标按钮、轨迹球、操纵杆等输入装置。输出装置704可以包括显示设备、辅助照明装置(例如,LED)和触觉反馈装置(例如,振动电机)等。该显示设备可以包括但不限于,液晶显示器(LCD)、发光二极管(LED)显示器和等离子体显示器。在一些实施方式中,显示设备可以是触摸屏。
此处描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、专用ASIC(专用集成电路)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
这些计算程序(也称作程序、软件、软件应用、或者代码)包括可编程处理器的机器指令,并且可以利用高级过程和/或面向对象的编程语言、和/或汇编/机器语言来实施这些计算程序。如本文使用的,术语“机器可读介质”和“计算机可读介质”指的是用于将机器指令和/或数据提供给可编程处理器的任何计算机程序产品、设备、和/或装置(例如,磁盘、光盘、存储器、可编程逻辑装置(PLD)),包括,接收作为机器可读信号的机器指令的机器可读介质。术语“机器可读信号”指的是用于将机器指令和/或数据提供给可编程处理器的任何信号。
为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)和互联网。
计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。
根据本申请实施例的技术方案,提供了一种针对事务的多线程并行处理方式,在主线程的协调下,可将待处理事务拆分为多个子事务,并对应提交至多个子线程来并行执行,而通过仅使执行失败的子线程进行重试,可减少对运算资源的消耗,提升性能。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发申请中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本申请公开的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本申请保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本申请的精神和原则之内所作的修改、等同替换和改进等,均应包含在本申请保护范围之内。