1.本发明涉及计算机技术领域,特别涉及一种业务请求的处理方法、装置、设备和存储介质。
背景技术:2.电子交易系统是一种利用计算机程序实现各类业务请求的自动处理的系统。为了处理系统中多个账户提出的大量业务请求,目前的电子交易系统往往会采用多线程机制,即预先创建多个工作线程,每个工作线程都有对应的工作队列,多个工作线程可以并行地从各自的工作队列读取并处理业务请求(一般由通信线程写入)。
3.为了节约计算机资源,现有的多线程机制中一般采用事件通知机制触发工作线程处理业务请求,即通信线程向某个工作队列写入一个业务请求,然后通过工作线程通知事件通知对应的工作线程读取该业务请求。
4.事件通知机制的问题在于,业务请求的处理过程,特别是从通信线程写入业务请求到工作线程读取业务请求之间,存在较长的延时(至少为5μs),而电子交易系统中存在大量不同业务请求,部分业务请求可以接受较长延时,而部分业务请求无法接受5μs的延时。因此,事件通知机制无法满足系统中不同业务请求的不同延时需求。
技术实现要素:5.基于上述现有技术的问题,本申请提供一种业务请求的处理方法、装置、设备和存储介质,以满足电子交易系统中不同业务请求的延时需求。
6.本申请第一方面提供一种业务请求的处理方法,应用于电子交易系统,所述电子交易系统包括对应于不同延时等级的工作线程组,每个所述工作线程组均包含至少一个工作线程,所述处理方法包括:接收业务请求;确定所述业务请求所属延时等级;其中,所述业务请求所属延时等级与所述业务请求的请求账户或交易对象可接受的延时相关;所述请求账户指代发送所述业务请求的账户;将所述业务请求所属延时等级相匹配的工作线程组包含的一个工作线程作为目标工作线程;利用所述目标工作线程基于所属工作线程组的延时等级对应的轮询参数处理所述业务请求;其中,所述轮询参数包括轮询次数上限和轮询间隔。
7.可选的,所述利用所述目标工作线程基于所属工作线程组的延时等级对应的轮询参数处理所述业务请求,包括:查询所述目标工作线程的工作队列中是否有所述业务请求;在所述目标工作线程的工作队列中有所述业务请求时,从所述目标工作线程的工作队列读取所述业务请求,并利用所述目标工作线程预设的业务处理逻辑处理所述业务请
求;在所述目标工作线程的工作队列中没有所述业务请求时,判断查询次数是否大于或等于所属工作线程组的延时等级对应的轮询次数上限,直至判断出查询次数大于或等于所属工作线程组的延时等级对应的轮询次数上限时,根据所属工作线程组的延时等级对应的轮询间隔,确定当前睡眠时长,并进入睡眠状态;其中,所述查询次数在进入睡眠状态时清零;当处于睡眠状态的时间达到所述当前睡眠时长时,退出睡眠状态,返回执行所述查询所述目标工作线程的工作队列中是否有所述业务请求步骤。
8.可选的,所述根据所属工作线程组的延时等级对应的轮询间隔,确定当前睡眠时长,包括:判断前一次进入睡眠状态时的睡眠时长,是否大于或等于所属工作线程组的延时等级对应的轮询间隔;若前一次进入睡眠状态时的睡眠时长大于或等于所属工作线程组的延时等级对应的轮询间隔,将预设的初始睡眠时长确定为当前睡眠时长;若前一次进入睡眠状态时的睡眠时长小于所属工作线程组的延时等级对应的轮询间隔,按预设的步长上调前一次进入睡眠状态时的睡眠时长,得到当前睡眠时长。
9.可选的,所述从所述目标工作线程的工作队列读取所述业务请求,包括:从所述目标工作线程的工作队列,读取所述业务请求和请求账户的数据指针;其中,所述请求账户指代发送所述业务请求的账户;所述请求账户的数据指针与所述业务请求一并被写入所述目标工作线程的工作队列;所述请求账户的数据指针用于指示所述请求账户的账户数据的存储地址。
10.可选的,所述利用所述目标工作线程基于所述工作线程组的延时等级对应的轮询参数处理所述业务请求之前,还包括:若未获取到目标工作线程,利用通信线程按预设的业务处理逻辑处理所述业务请求;若获取到目标工作线程,执行所述利用所述目标工作线程基于所属工作线程组的延时等级对应的轮询参数处理所述业务请求步骤。
11.本申请第二方面提供一种业务请求的处理装置,应用于电子交易系统,所述电子交易系统包括对应于不同延时等级的工作线程组,每个所述工作线程组均包含至少一个工作线程,所述处理装置包括:接收单元,用于接收业务请求;确定单元,用于确定所述业务请求所属延时等级;其中,所述业务请求所属延时等级与所述业务请求的请求账户或交易对象可接受的延时相关;所述请求账户指代发送所述业务请求的账户;获取单元,用于将所述业务请求所属延时等级相匹配的工作线程组包含的一个工作线程作为目标工作线程;处理单元,用于利用所述目标工作线程基于所属工作线程组的延时等级对应的轮询参数处理所述业务请求;其中,所述轮询参数包括轮询次数上限和轮询间隔。
12.可选的,所述处理单元利用所述目标工作线程基于所属工作线程组的延时等级对
应的轮询参数处理所述业务请求时,具体用于:查询所述目标工作线程的工作队列中是否有所述业务请求;在所述目标工作线程的工作队列中有所述业务请求时,从所述目标工作线程的工作队列读取所述业务请求,并利用所述目标工作线程预设的业务处理逻辑处理所述业务请求;在所述目标工作线程的工作队列中没有所述业务请求时,判断查询次数是否大于或等于所属工作线程组的延时等级对应的轮询次数上限,直至判断出查询次数大于或等于所属工作线程组的延时等级对应的轮询次数上限时,根据所属工作线程组的延时等级对应的轮询间隔,确定当前睡眠时长,并进入睡眠状态;其中,所述查询次数在进入睡眠状态时清零;当处于睡眠状态的时间达到所述当前睡眠时长时,退出睡眠状态,返回执行所述查询所述目标工作线程的工作队列中是否有所述业务请求步骤。
13.可选的,所述处理单元根据所属工作线程组的延时等级对应的轮询间隔,确定当前睡眠时长时,具体用于:判断前一次进入睡眠状态时的睡眠时长,是否大于或等于所属工作线程组的延时等级对应的轮询间隔;若前一次进入睡眠状态时的睡眠时长大于或等于所属工作线程组的延时等级对应的轮询间隔,将预设的初始睡眠时长确定为当前睡眠时长;若前一次进入睡眠状态时的睡眠时长小于所属工作线程组的延时等级对应的轮询间隔,按预设的步长上调前一次进入睡眠状态时的睡眠时长,得到当前睡眠时长。
14.可选的,所述处理单元从所述目标工作线程的工作队列读取所述业务请求时,具体用于:从所述目标工作线程的工作队列,读取所述业务请求和请求账户的数据指针;其中,所述请求账户指代发送所述业务请求的账户;所述请求账户的数据指针与所述业务请求一并被写入所述目标工作线程的工作队列;所述请求账户的数据指针用于指示所述请求账户的账户数据的存储地址。
15.可选的,所述处理单元还用于:若未获取到目标工作线程,按预设的业务处理逻辑处理所述业务请求;若获取到目标工作线程,执行所述利用所述目标工作线程基于所属工作线程组的延时等级对应的轮询参数处理所述业务请求步骤。
16.本申请第三方面提供一种电子设备,包括存储器和处理器;所述存储器用于存储计算机程序;所述处理器用于执行所述计算机程序,具体用于实现本申请第一方面任意一项所提供的业务请求的处理方法。
17.本申请第四方面提供一种计算机存储介质,用于存储计算机程序,所述计算机程序被执行时,具体用于实现本申请第一方面任意一项所提供的业务请求的处理方法。
18.本申请提供一种业务请求的处理方法、装置、设备和存储介质,应用于电子交易系统,系统设置有不同延时等级的多个工作线程组,处理方法包括:收到业务请求后,确定该业务请求所属延时等级;业务请求所属延时等级表征该业务请求可接受的延时上限;获取
所属延时等级匹配的工作线程组中的目标工作线程;利用目标工作线程基于工作线程组的延时等级对应的轮询参数(包括轮询次数上限和轮询间隔)处理业务请求。轮询次数和轮询间隔可以控制不同延时等级的工作线程处理业务请求的延时,本方案利用与业务请求的延时等级匹配的工作线程处理业务请求,保障处理过程的延时满足不同业务请求的需求。
附图说明
19.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
20.图1为本申请实施例提供的一种电子交易系统的架构示意图;图2为本申请实施例提供的一种业务请求的处理方法的流程图;图3为本申请实施例提供的一种业务请求的处理装置的结构示意图;图4为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
21.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
22.本申请提供的业务请求的处理方案,主要适用于于电子交易系统,具体可以由电子交易系统中的通信线程执行,为了便于理解本申请提供的业务请求的处理方案,首先介绍电子交易系统的架构。
23.请参考图1,电子交易系统一般部署于服务器端,主要包括通信线程和工作线程,其中每一个工作线程都配置有对应的一个工作队列,任意一个账户通过客户端登陆至电子交易系统之后,可以向电子交易系统发送业务请求,如出售或购买金融产品,业务请求会被电子交易系统中的通信线程接收,随后,通信线程将该业务请求写入某个工作队列,同时,每一个工作线程都会实时地从自身的工作队列中逐一读取业务请求并处理读取到的每一个业务请求,由此,电子交易系统就可以处理各个账户的业务请求。
24.基于上述电子交易系统,本申请提供一种可以应用于上述电子交易系统的,业务请求的处理方法,请参考图2,该处理方法具体可以包括如下步骤:需要说明的是,本申请所提供的处理方法,其执行主体可以是图1所示的每一个通信线程,换言之,图1中每一个通信线程在收到业务请求后,都可以依据本申请提供的方法将其写入相应的工作队列。
25.s201、接收业务请求。
26.如前文所述,业务请求可以由任意一个账户在登陆至电子交易系统发送,并被电子交易系统中的任意一个通信线程接收。
27.业务请求具体可以携带有如下信息:请求账户的账户信息,如账号,账户等级等,需要执行的交易行为(如出售或购
买),以及针对的交易对象。例如账户a向电子交易系统请求购买一定额度的股票b,则发送的业务请求中可以携带账户a的账户信息,和股票b的股票代码,并指明交易行为为购买,对于这一业务请求,账户a就是该业务请求的请求账户,股票b就是该业务请求的交易对象。
28.s202、确定业务请求所属延时等级。
29.其中,业务请求所属延时等级,与该业务请求的请求账户或交易对象可接受的延时相关。
30.本申请提供的电子交易系统中,可以预先设定若干个延时等级,每一个账户都属于其中的某一个延时等级,例如可以由高到低划分出高级,中级和低级三个延时等级。
31.基于设定好的多个延时等级,可以根据需要,从交易对象的维度或者请求账户的维度,将电子交易系统收到的业务请求划分至不同的延时等级。
32.如果从请求账户的维度划分,可以预先将电子交易系统中的各个账户,按照可接受的延时长短划分至不同延时等级,某个账户所属的延时等级越低,则该账户可接受的延时就越长,也就是该账户对业务请求的处理时效性的要求较低。
33.一般的,现有的电子交易系统中通常会根据每个账户的以往的使用情况和消费情况设定多个账户等级,如普通账户,vip账户,超级vip账户等,在本申请中,可以针对系统中现有的每一个账户等级对应的设定一个延时等级,例如普通账户对应延时等级的低级,vip账户对应中级,超级vip对应高级。
34.将系统中的账户划分至各个设定好的延时等级后,在步骤s202中,就可以直接按业务请求的请求账户,确定该业务请求所属延时等级。例如,某业务请求的请求账户属于中级的延时等级,则该业务请求所属延时等级也是中级,某业务请求的请求账户属于低级的延时等级,则该业务请求所属延时等级也是低级。
35.即从请求账户的维度划分时,业务请求所属延时等级,就是该业务请求的请求账户所属的延时等级。
36.如果从交易对象的维度划分,同样可以将电子交易系统涉及的所有金融产品按照可接受的延时长短划分至不同延时等级。某支股票所属的延时等级越低,则该股票可接受的延时就越长,也就是针对该股票的业务请求的处理时效性的要求较低。
37.例如,电子交易系统可以支持用户对100支股票(即电子交易系统涉及的交易对象有100个)的交易,其中某些股票的行情波动较剧烈,容易在短时间内发生大幅波动,这类股票可以划分至较高的延时等级,某些股票行情较为稳定,一般不会发生大幅波动,这类股票可以划分至较低的延时等级。
38.将系统支持的各个交易对象划分至各个设定好的延时等级后,在步骤s202中,就可以直接按业务请求所针对的交易对象,确定该业务请求所属延时等级。例如,某业务请求要交易的股票a(即该业务请求的交易对象)属于中级的延时等级,则该业务请求所属延时等级也是中级,某业务请求要交易的股票b属于低级的延时等级,则该业务请求所属延时等级也是低级。
39.即从交易对象的维度划分时,业务请求所属延时等级,就是该业务请求的交易对象所属的延时等级。
40.s203、获取业务请求所属延时等级相匹配的工作线程组包含的一个工作线程作为目标工作线程。
41.在本申请中,电子交易系统的多个工作线程被预先划分为不同的工作线程组,每个工作线程组同样对应于前述各个延时等级,例如,针对高级,中级和低级的延时等级,可以划分出工作线程组a,b和c,其中工作线程组a对应延时等级中的高级,工作线程组b对应中级,工作线程组c对应低级,不同工作线程组的工作线程基于不同的参数运行,通过设置不同的参数,可以使不同工作线程组的工作线程在从工作队列读取业务请求时具有不同长度的延时。
42.相应的,在步骤s203中,就可以在多个工作线程组中确定出业务请求所属延时等级对应的那个工作线程组,将其作为业务请求所属延时等级相匹配的工作线程组。
43.例如,步骤s202中确定出当前收的的业务请求所属延时等级为高级,在步骤s203中,就可以在高级对应的工作线程组a中选择一个工作线程作为目标线程。
44.不同工作线程组之间可以通过别名进行区分,如前述a,b,c,同时,系统中可以针对每一个工作线程组实现一个访问接口,访问接口中记录有该工作线程组所包含的工作线程的线程序号,例如,工作线程组a包含序号1至5的工作线程,工作线程组b包含序号6至10的工作线程,工作线程组c包含序号11至15的工作线程。
45.基于上述配置,在步骤s203中,通信线程可以首先访问业务请求所属延时等级相匹配的工作线程组对应的那个访问接口,如访问工作线程组a的访问接口,然后从该访问接口所记录的线程序号中选择一个线程序号,将该线程序号所标识的工作线程确定为目标工作线程。
46.s204、利用目标工作线程基于所属工作线程组的延时等级对应的轮询参数处理业务请求。
47.步骤s204具体包括,由通信线程将业务请求写入目标工作线程所对应的工作队列,同时,目标工作线程按照自身所属工作线程组的延时等级所对应的轮询参数轮询对应的工作队列,从而在工作队列中读取到通信线程写入的业务请求,然后按预设的业务处理逻辑处理读取到的业务请求。
48.其中,轮询参数包括轮询次数上限和轮询间隔。
49.一般的,工作线程在处理一个业务请求时,通常需要用到请求账户的账户数据,账户数据可以包括该账户目前持有哪些金融产品,具有持有的额度是多少等,那么,对于涉及金融产品交易的业务请求,工作线程在处理时就需要对请求账户的账户数据进行核实和更新,因此在步骤s204中,通信线程可以将业务请求和请求账户的数据指针一并写入目标工作线程的工作队列;请求账户的数据指针用于指示请求账户的账户数据的存储地址。这样工作线程在处理该业务请求时,就可以根据请求账户的数据指针读取到请求账户的账户数据。
50.请求账户的数据指针,业务请求所属延时等级以及目标工作线程的线程序号,均可以调用系统中预先设定的业务定位函数确定。
51.不同工作线程组的工作线程,会配置有不同的轮询参数,而轮询参数会影响工作线程从工作队列读取业务请求的延时长短,因此,在配置轮询参数时,可以为对应的延时等级较高的工作线程组配置延时较短的轮询参数,而为对应的延时等级较低的工作线程组配置延时较长的轮询参数,这样,不同工作线程组的工作线程在读取业务请求时就会有不同长度的延时,而某个业务请求具体被分配给哪一个工作线程组的工作线程,又是由该业务
请求所属的延时等级决定的,由此,本方案就可以根据各个业务请求所属的延时等级的高低,调整各个业务请求被工作线程读取时的延时,对于那些请求账户或交易对象有较高的时效性要求的业务请求,即所属延时等级较高的业务请求,可以将其分配给延时较短的工作线程组中的工作线程,对于那些请求账户或交易对象的时效性要求较低,因而属于较低延时等级的业务请求,则会被分配给延时较长的工作线程组中的工作线程,从而保障各个业务请求被读取的延时满足不同业务请求的需求。
52.下述代码是本申请提供的一种划分不同工作线程组并设置不同的轮询参数的示例:"workthreads":[
ꢀꢀꢀꢀ
{
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
"count":2,
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
"threadalias":"a",
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
"pollingloops":1,
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
"sleeptimeus":0
ꢀꢀꢀꢀ
},
ꢀꢀꢀꢀ
{
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
"count":1,
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
"threadalias":"b",
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
"pollingloops":100,
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
"sleeptimeus":2
ꢀꢀꢀꢀ
},
ꢀꢀꢀꢀ
{
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
"count":3,
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
"threadalias":"c",
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
"pollingloops":0
ꢀꢀꢀꢀ
}]上述代码共划分了三个工作线程组,分别是工作线程组a,b和c,其中,count表示工作线程组所包含工作线程的数量,threadalias表示工作线程组的别名,pollongloops表示轮询次数上限,sleeptimeus表示轮询间隔,单位为微秒(us)。
[0053]
例如,工作线程组a,别名为a,包含2个工作线程,轮询次数上限为1,轮询间隔为0us,工作线程组b,别名为b,包含1个工作线程,轮询次数上限为100,轮询间隔为2us。
[0054]
其中,轮询次数上限可以设置为0,如工作线程组c,当此项设置为0时,说明该工作线程组的工作线程不采用轮询的机制从工作队列读取业务请求,而是采用事件通知机制,即通信线程通过通知事件通知工作线程之后,工作线程再从工作队列读取业务请求。特别的,当轮询次数上限设定为0时,由于工作线程不再采用轮询机制读取业务请求,因此不需要设定轮询间隔。
[0055]
也就是说,若确定出的目标工作线程属于工作线程组c,则通信线程会在将业务请求写入工作队列之后,通过通知事件向目标工作线程发送通知消息,从而触发目标工作线
程从对应的工作队列中读取业务请求,反之,对于工作线程组c的工作线程,在未收到通知消息时,不会访问自身的工作队列,即不会尝试从工作队列中读取业务请求。
[0056]
上述三个工作线程组中,工作线程组a对应的延时等级最高,其工作线程读取业务请求的延时最短,工作线程组b对应的延时等级低于a且高于c,工作线程组c对应的延时等级低于b。
[0057]
结合前述例子,步骤s204,即利用目标工作线程基于所属工作线程组的延时等级对应的轮询参数处理业务请求,具体可以包括:查询目标工作线程的工作队列中是否有业务请求;在目标工作线程的工作队列中没有业务请求时,判断查询次数是否大于或等于所属工作线程组的延时等级对应的轮询次数上限;其中,查询次数指代对目标工作线程的工作队列中是否有业务请求执行查询操作的次数。
[0058]
若查询次数小于所属工作线程组的延时等级对应的轮询次数上限,返回执行查询目标工作线程的工作队列中是否有业务请求步骤;若查询次数大于或等于所属工作线程组的延时等级对应的轮询次数上限,根据所属工作线程组的延时等级对应的轮询间隔确定当前睡眠时长,并进入睡眠状态;其中,查询次数在进入睡眠状态时清零;当处于睡眠状态的时间达到当前睡眠时长时,退出睡眠状态,返回执行查询目标工作线程的工作队列中是否有业务请求步骤;在目标工作线程的工作队列中有业务请求时,从目标工作线程的工作队列读取业务请求;利用目标工作线程按预设的业务处理逻辑处理业务请求。
[0059]
进一步的,目标工作线程根据所属工作线程组的延时等级对应的轮询间隔确定当前睡眠时长,包括:判断前一次进入睡眠状态时的睡眠时长是否大于或等于所属工作线程组的延时等级对应的轮询间隔;若前一次进入睡眠状态时的睡眠时长大于或等于所属工作线程组的延时等级对应的轮询间隔,将预设的初始睡眠时长确定为当前睡眠时长;特别的,若所属工作线程组的延时等级对应的轮询间隔为0,则对应的初始睡眠时长也是0。
[0060]
若前一次进入睡眠状态时的睡眠时长小于所属工作线程组的延时等级对应的轮询间隔,按预设的步长上调前一次进入睡眠状态时的睡眠时长,得到当前睡眠时长。
[0061]
例如,若轮询间隔设定为5us,初始睡眠时长为1us,预设的步长为1us,则工作线程在首次睡眠时,睡眠时长为1us,第二次睡眠时,睡眠时长为2us,此后依次是3us,4us和5us(第五次睡眠的睡眠时长),在开始第六次睡眠时,由于前一次的睡眠时长达到轮询间隔5us,因此将睡眠时长初始化,即再次设定为初始睡眠时长1us,然后在第六次睡眠至第十次睡眠之间重复上述过程。
[0062]
下面以前述工作线程组a和b为例,对上述轮询机制进行说明。
[0063]
若目标工作线程属于工作线程组a,则目标工作线程在启动后,首先会查询工作队列中有无业务请求,随后查询次数增加1,此时查询次数为1,查询后,若有业务请求,则读取
一个业务请求并处理,若没有业务请求,判断出查询次数达到所属工作线程组a的轮询次数上限1,于是将查询次数清零,并确定当前睡眠时长,由于工作线程组a的轮询间隔为0,因此将当前睡眠时长设定为0,也就是不进行睡眠,随后,目标工作线程再次查询工作队列中有无业务请求,重复上述过程。
[0064]
可以看出,由于工作线程组a的轮询间隔为0,属于工作线程组a的工作线程会不间断地实时对工作队列进行查询,若查询到业务请求则读取并进行处理,因此,工作线程组a的工作线程在读取业务请求时的延时最短,当业务请求被分配给工作线程组a的工作线程时,工作线程能够在业务请求写入完成后第一时间从工作队列读取并处理业务请求。
[0065]
若目标工作线程属于工作线程组b,则启动后,目标工作线程进行一次查询,随后查询次数增加1,假设此时的查询次数为1,查询后,若有业务请求,则读取一个业务请求并处理,若没有业务请求,由于查询次数未达到轮询次数上限100,继续进行查询,直至查询次数累计到100为止。
[0066]
当查询次数累计到100,即达到工作线程组b的轮询次数上限时,将初始睡眠时长1us确定为当前睡眠时长,然后将查询次数清零,开始睡眠,在睡眠1us后,目标工作线程启动,重复上述查询过程,直至查询次数再次达到轮询次数上限,然后按预设的步长1us上调当前睡眠时长,即将当前睡眠时长设定为2us,然后清零查询次数,并睡眠2us,2us之后再次启动,重复上述查询过程。
[0067]
当查询次数第三次达到轮询次数上限,需要进行第三次睡眠时,由于前一次睡眠时长达到轮询间隔2us,于是将第三次的睡眠时长设定为初始睡眠时长1us。后续过程以此类推。
[0068]
可以看出,工作线程组b的工作线程由于会睡眠1us到2us,因此在读取业务请求时,相比于工作线程组a,可能会有1us到2us的延时,因此对应的延时等级也低于工作线程组a。
[0069]
可选的,为了避免通信线程向工作队列写业务请求的过程和工作线程读取业务请求的过程发生冲突,通信线程在向一个工作队列写入业务请求时,可以通过加锁的操作锁定该工作队列,在写入完成后,再为该工作队列解锁。
[0070]
其中,若通信线程需要向轮询次数上限为0的工作线程的工作队列写入业务请求,则通信线程可以先为这个工作队列添加一个互斥锁以锁定该工作队列,然后向其中写入业务请求,写入完成后,解除该工作队列的互斥锁,并通过通知事件通知工作线程,以便工作线程从工作队列中读取业务请求。
[0071]
若通信线程需要向轮询次数上限大于0的工作线程的工作队列写入业务请求,则通信线程可以先为这个工作队列添加一个自旋锁以锁定该工作队列,然后向其中写入业务请求,写入完成后,解除该工作队列的自旋锁,以便相应的工作线程能够查询该工作队列,并在查询到业务请求后读取该业务请求。
[0072]
可选的,在步骤s204之前,若通信线程未获取到目标工作线程,可以直接由通信线程自身按预设的业务处理逻辑处理业务请求;若获取到目标工作线程,再执行利用目标工作线程基于所属工作线程组的延时等级对应的轮询参数处理业务请求步骤,即执行步骤s204。
[0073]
在划分工作线程组时,工作线程组的数量可以比延时等级的数量少一个,如由高
至低划分了四个延时等级,依次是特级,高级,中级和低级,设置工作线程组时,可以只设置高级,中级和低级对应的三个工作线程组,而特级则不对应工作线程组。
[0074]
属于特级的业务请求对于时效性的要求最高,即该等级的业务请求需要以尽可能最快的速度处理,基于上述设定,当通信线程收到属于特级的业务请求时,由于没有和特级匹配的工作线程组,自然就无法获取到满足条件的目标工作线程,于是通信线程自己调用预设的业务处理逻辑处理属于的业务请求,这样就完全取消了业务请求被写入工作队列然后由工作线程读取的这一流程,最大限度的缩短了处理该业务请求所消耗的时间,从而满足特级的业务请求对于时效性的要求。
[0075]
结合本申请提供的业务请求的处理方法,本申请实施例还提供一种业务请求的处理装置,请参考图3,该装置可以包括如下单元:接收单元301,用于接收业务请求。
[0076]
确定单元302,用于确定业务请求所属延时等级。
[0077]
其中,业务请求所属延时等级与业务请求的请求账户或交易对象可接受的延时相关;请求账户指代发送业务请求的账户。
[0078]
获取单元303,用于获取业务请求所属延时等级相匹配的工作线程组包含的一个工作线程作为目标工作线程。
[0079]
处理单元304,用于利用目标工作线程基于所属工作线程组的延时等级对应的轮询参数处理业务请求。
[0080]
其中,轮询参数包括轮询次数上限和轮询间隔。
[0081]
可选的,处理单元304还用于:若未获取到目标工作线程,按预设的业务处理逻辑处理业务请求;若获取到目标工作线程,执行利用目标工作线程基于所属工作线程组的延时等级对应的轮询参数处理业务请求。
[0082]
可选的,处理单元304利用目标工作线程基于所属工作线程组的延时等级对应的轮询参数处理业务请求时,具体用于:查询目标工作线程的工作队列中是否有业务请求;在目标工作线程的工作队列中没有业务请求时,判断查询次数是否大于或等于所属工作线程组的延时等级对应的轮询次数上限;若查询次数小于所属工作线程组的延时等级对应的轮询次数上限,返回执行查询目标工作线程的工作队列中是否有业务请求步骤;若查询次数大于或等于所属工作线程组的延时等级对应的轮询次数上限,根据所属工作线程组的延时等级对应的轮询间隔确定当前睡眠时长,并进入睡眠状态;其中,查询次数在进入睡眠状态时清零;当处于睡眠状态的时间达到当前睡眠时长时,退出睡眠状态,返回执行查询目标工作线程的工作队列中是否有业务请求步骤;在目标工作线程的工作队列中有业务请求时,从目标工作线程的工作队列读取业务请求;利用目标工作线程基于预设的业务处理逻辑处理业务请求。
[0083]
可选的,处理单元304根据所属工作线程组的延时等级对应的轮询间隔确定当前
睡眠时长时,具体用于:判断前一次进入睡眠状态时的睡眠时长是否大于或等于所属工作线程组的延时等级对应的轮询间隔;若前一次进入睡眠状态时的睡眠时长大于或等于所属工作线程组的延时等级对应的轮询间隔,将预设的初始睡眠时长确定为当前睡眠时长;若前一次进入睡眠状态时的睡眠时长小于所属工作线程组的延时等级对应的轮询间隔,按预设的步长上调前一次进入睡眠状态时的睡眠时长,得到当前睡眠时长。
[0084]
可选的,处理单元304从目标工作线程的工作队列读取业务请求时,具体用于:从目标工作线程的工作队列,读取业务请求和请求账户的数据指针。
[0085]
其中,请求账户的数据指针与业务请求一并被写入目标工作线程的工作队列;请求账户的数据指针用于指示请求账户的账户数据的存储地址。
[0086]
本申请实施例提供的业务请求的处理装置,其具体工作原理可以参考本申请实施例所提供的业务请求的处理方法中的相关步骤,此处不再赘述。
[0087]
本申请提供一种业务请求的处理装置,应用于电子交易系统,电子交易系统包括对应于不同延时等级的工作线程组,每个工作线程组均包含多个工作线程,该处理装置中,接收单元301接收业务请求;确定单元302确定业务请求所属延时等级;获取单元303获取业务请求所属延时等级相匹配的工作线程组包含的一个工作线程作为目标工作线程;处理单元304利用目标工作线程基于所属工作线程组的延时等级对应的轮询参数处理业务请求,其中,轮询参数包括轮询次数上限和轮询间隔。为不同延时等级的工作线程配置相应的轮询次数和轮询间隔,可以控制不同延时等级的工作线程处理业务请求的延时的长短,由此,本方案在处理业务请求时,可以根据业务请求所属延时等级将业务请求分配到和该延时等级匹配的工作线程的工作队列中,从而保障该业务请求被处理的延时满足该业务请求的需求。
[0088]
本申请实施例还提供一种电子设备,请参考图4,该电子设备可以包括存储器401和处理器402。
[0089]
其中,存储器401用于存储计算机程序。
[0090]
处理器402用于执行计算机程序,具体用于实现本申请任一实施例所提供的业务请求的处理方法。
[0091]
本申请实施例还提供一种计算机存储介质,用于存储计算机程序,计算机程序被执行时,具体用于实现本申请任一实施例所提供的业务请求的处理方法。
[0092]
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0093]
需要注意,本发明中提及的“第一”、“第二”等概念仅用于对不同的装置、模块或单元进行区分,并非用于限定这些装置、模块或单元所执行的功能的顺序或者相互依存关系。
[0094]
专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。