一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

线程池拥塞的控制方法、系统、终端设备以及存储介质与流程

2022-03-23 07:25:11 来源:中国专利 TAG:


1.本发明涉及金融科技(fintech)技术领域,尤其涉及一种线程池拥塞的控制方法、系统、终端设备以及计算机存储介质。


背景技术:

2.随着计算机技术的发展,越来越多的技术应用在金融领域,传统金融业正在逐步向金融科技转变,但由于金融行业的安全性、实时性以及稳定性等要求,也对技术提出了更高的要求。
3.目前,多线程处理技术被广泛应用于业务请求高并发的场景,该多线程处理技术是在一个新的请求任务到达时,通过多线程程序创建一个新的线程来处理该请求任务,如此,多个请求任务由不同的线程分别进行处理,而在请求任务被处理完成后,多线程程序会销毁对应的线程。如此,多线程程序的设计增加了服务器处理的业务请求的并发度,能够有效提升系统整体的吞吐量。然而,由于多线程程序频繁的进行线程创建、销毁、切换也会带来不小的系统资源开销。
4.尽管现有的线程池技术能够通过复用线程来避免线程的频繁创建和销毁以提升服务器的性能,并且还能起到隔离服务的作用防止级联影响。但是,现有的线程池技术也存在一些不足,例如当突发的高并发流量到来时,线程池可能会因为线程繁忙而令任务进行排队,从而导致部分请求不能及时处理而超时,而在线程池中线程个数设置不合理时,又容易导致调用下游服务的tps(transaction per second,表达系统处理能力的性能指标)过大,从而出现请求拥塞现象,致使下游服务崩溃或性能恶化。
5.综上所述,现有多线程处理业务请求中采用的线程池技术面对请求高并发的场景,无法基于下游服务实际的请求处理能力来降低业务请求的处理时延。


技术实现要素:

6.本发明的主要目的在于提供一种线程池拥塞的控制方法、系统、终端设备以及计算机存储介质,旨在解决现有多线程处理业务请求中采用的线程池技术面对请求高并发的场景,无法基于下游服务实际的请求处理能力来降低业务请求的处理时延的技术问题。
7.为实现上述目的,本发明提供一种线程池拥塞的控制方法,所述线程池拥塞的控制方法包括以下步骤:
8.所述线程池拥塞的控制方法包括以下步骤:
9.接收请求任务并将所述请求任务加入线程池的预处理队列;
10.获取所述线程池的拥塞窗口值,并根据所述拥塞窗口值定时从所述预处理队列中拉取所述请求任务,以将所述请求任务迁移至所述线程池的待消费队列作为待处理任务;
11.从所述待消费队列获取所述待处理任务并发起下游服务调用;
12.采集发起所述下游服务调用的调用参数,并根据所述调用参数对所述拥塞窗口值进行动态调整。
13.优选地,所述方法还包括:
14.统计下游服务调用的平均时延,在所述拥塞窗口值大于所述线程池的发送窗口时,根据所述平均时延与所述拥塞窗口值和所述发送窗口之间差值的乘积,增加所述线程池的线程数量,以针对所述发送窗口进行动态调整;或者,
15.获取所述线程池实时的运行状态,在所述运行状态符合预设条件时减少所述线程数量,以针对所述发送窗口进行动态调整。
16.优选地,所述方法还包括:
17.获取所述线程池的状态参数,其中,所述状态参数包括:启动状态、初始状态、窗口探测状态、平稳状态和窗口回复状态;
18.所述根据所述调用参数对所述拥塞窗口值进行动态调整的步骤,包括:
19.根据所述调用参数和所述状态参数对所述拥塞窗口值进行动态调整。
20.优选地,所述根据所述调用参数和所述状态参数对所述拥塞窗口值进行动态调整的步骤,包括:
21.根据所述调用参数和所述状态参数确定对应的拥塞控制策略;
22.执行所述拥塞控制策略,以所述线程池的历史最拥塞窗口值和初始拥塞窗口因子相乘来计算得出新的拥塞窗口值;或者,
23.执行所述拥塞控制策略,以所述线程池的初始拥塞窗口值和所述初始拥塞窗口因子相乘来计算得出新的拥塞窗口值;
24.使用所述新的拥塞窗口值对所述拥塞窗口值进行更新。
25.优选地,所述根据所述拥塞窗口值定时从所述预处理队列中拉取所述请求任务,以将所述请求任务迁移至所述线程池的待消费队列作为待处理任务的步骤,包括:
26.按照预设的时间周期定时从所述预处理队列中确定所述拥塞窗口值对应数量的目标请求任务进行主动拉取;
27.将拉取到的所述目标请求任务迁移至所述线程池的待消费队列中作为待处理任务。
28.优选地,所述接收请求任务并将所述请求任务加入线程池的预处理队列的步骤,包括:
29.获取预设客户端提交的请求任务的第一任务数量;
30.检测所述第一任务数量与预设线程池队列的第二任务数量之间的大小关系;
31.若检测到所述大小关系为所述第一任务数量大于或者等于所述第二任务数量,则接收所述请求任务并将所述请求任务加入到所述线程池的预处理队列。
32.优选地,在所述检测所述第一任务数量与预设线程池队列的第二任务数量之间的大小关系的步骤之后,还包括:
33.若检测到所述第一任务数量小于所述第二任务数量,则执行预设的请求拒绝策略。
34.此外,为实现上述目的,本发明还提供一种线程池拥塞的控制系统,所述线程池拥塞的控制系统包括:
35.任务接收模块,用于接收请求任务并将所述请求任务加入线程池的预处理队列;
36.任务迁移模块,用于获取所述线程池的拥塞窗口值,并根据所述拥塞窗口值定时
从所述预处理队列中拉取所述请求任务,以将所述请求任务迁移至所述线程池的待消费队列作为待处理任务;
37.服务调用模块,用于从所述待消费队列获取所述待处理任务并发起下游服务调用;
38.动态调整模块,用于采集发起所述下游服务调用的调用参数,并根据所述调用参数对所述拥塞窗口值进行动态调整。
39.其中,本发明线程池拥塞的控制系统的各个功能模块在运行时实现如上所述的线程池拥塞的控制方法的步骤。
40.此外,为实现上述目的,本发明还提供一种终端设备,所述终端设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的线程池拥塞的控制程序,所述线程池拥塞的控制程序被所述处理器执行时实现如上所述的线程池拥塞的控制方法的步骤。
41.此外,为实现上述目的,本发明还提供一种计算机存储介质,所述计算机存储介质上存储有线程池拥塞的控制程序,所述线程池拥塞的控制程序被处理器执行时实现如上所述的线程池拥塞的控制方法的步骤。
42.此外,为实现上述目的,本发明还提供计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现如上所述的线程池拥塞的控制方法的步骤。
43.本发明提供一种线程池拥塞的控制方法、系统、终端设备、计算机存储介质以及计算机程序产品,通过接收请求任务并将所述请求任务加入线程池的预处理队列;获取所述线程池的拥塞窗口值,并根据所述拥塞窗口值定时从所述预处理队列中拉取所述请求任务,以将所述请求任务迁移至所述线程池的待消费队列作为待处理任务;从所述待消费队列获取所述待处理任务并发起下游服务调用;采集发起所述下游服务调用的调用参数,并根据所述调用参数对所述拥塞窗口值进行动态调整。
44.本发明在通过多线程针对客户端请求任务进行处理的过程中,通过接收客户端的请求任务,并将该请求任务先加入到当前线程池的预处理队列当中,之后,通过获取当前线程池的拥塞窗口值,以根据该拥塞窗口值来实时的从该预设处理队列当中拉取接收到的请求任务,并将该请求任务迁移至当前线程池的待消费队列当中作为待处理任务,再之后,从该待消费队列当中获取该待处理任务并发起下游服务调用来进行任务处理,最后,通过采集发起该下游服务调用的调用参数,从而根据该调用参数来针对当前线程池的拥塞窗口值进行动态调整。
45.本发明相比于现有线程池技术,通过动态的针对线程池的拥塞窗口值进行调整,从而令线程池能够始终基于最优的拥塞窗口以充分利用下游服务的能力,实现了既能够避免压垮下游服务或导致下游服务性能进一步恶化,又得以在避免拥塞的情况下充分利用下游服务的能力,有效地降低了处理请求任务的时延。
46.此外,本发明基于增加预处理队列来控制线程池的tps,还使得对线程池动态调节的粒度能够精确到每秒的请求量,实现了线程池在更细粒度上的调节。
附图说明
47.图1为本发明实施例方案涉及的终端设备硬件运行环境的设备结构示意图;
48.图2为本发明线程池拥塞的控制方法一实施例的流程示意图;
49.图3为本发明线程池拥塞的控制方法一实施例涉及的线程池的状态转换场景示意图;
50.图4为本发明线程池拥塞的控制方法一实施例涉及的应用流程示意图;
51.图5为本发明线程池拥塞的控制系统一实施例的功能模块示意图。
52.本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
53.应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
54.参照图1,图1为本发明实施例方案涉及的终端设备硬件运行环境的设备结构示意图。
55.本发明实施例终端设备可以是被配置针对线程池进行拥塞控制的终端设备,该终端设备可以是服务器、智能手机、pc(personal computer,个人计算机)、平板电脑、便携计算机等等。
56.如图1所示,该终端设备可以包括:处理器1001,例如cpu,通信总线1002,用户接口1003,网络接口1004,存储器1005。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(display)、输入单元比如键盘(keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如wi-fi接口)。存储器1005可以是高速ram存储器,也可以是稳定的存储器(non-volatile memory),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。
57.本领域技术人员可以理解,图1中示出的终端设备结构并不构成对终端设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
58.如图1所示,作为一种计算机存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及线程池拥塞的控制程序。
59.在图1所示的终端中,网络接口1004主要用于连接后台服务器,与后台服务器进行数据通信;用户接口1003主要用于连接客户端,与客户端进行数据通信;而处理器1001可以用于调用存储器1005中存储的线程池拥塞的控制程序,并执行以下线程池拥塞的控制方法的各实施例。
60.基于上述硬件结构,提出本发明线程池拥塞的控制方法的各实施例。
61.需要说明的是,由于多线程处理技术被广泛应用于业务请求高并发的场景,该多线程处理技术是在一个新的请求任务到达时,通过多线程程序创建一个新的线程来处理该请求任务,如此,多个请求任务由不同的线程分别进行处理,而在请求任务被处理完成后,多线程程序会销毁对应的线程。如此,多线程程序的设计增加了服务器处理的业务请求的并发度,能够有效提升系统整体的吞吐量。然而,由于多线程程序频繁的进行线程创建、销毁、切换也会带来不小的系统资源开销。
62.尽管现有的线程池技术能够通过复用线程来避免线程的频繁创建和销毁以提升服务器的性能,并且还能起到隔离服务的作用防止级联影响。但是,现有的线程池技术也存在一些不足,例如当突发的高并发流量到来时,线程池可能会因为线程繁忙而令任务进行
排队,从而导致部分请求不能及时处理而超时,而在线程池中线程个数设置不合理时,又容易导致调用下游服务的tps过大,从而出现请求拥塞现象,致使下游服务崩溃或性能恶化。
63.综上所述,现有多线程处理业务请求中采用的线程池技术面对请求高并发的场景,无法基于下游服务实际的请求处理能力来降低业务请求的处理时延。
64.针对上述现象,本发明提供一种线程池拥塞的控制方法,旨在通过动态的针对线程池的拥塞窗口值进行调整,从而令线程池能够始终基于最优的拥塞窗口以充分利用下游服务的能力,实现了既能够避免压垮下游服务或导致下游服务性能进一步恶化,又得以在避免拥塞的情况下充分利用下游服务的能力,有效地降低了处理请求任务的时延。
65.请参照图2,图2为本发明线程池拥塞的控制方法第一实施例的流程示意图。
66.在本实施例中,本发明线程池拥塞的控制方法应用于上述的终端设备,本发明线程池拥塞的控制方法包括:
67.步骤s10,接收请求任务并将所述请求任务加入线程池的预处理队列;
68.终端设备在通过多线程针对客户端请求任务进行处理的过程中,通过接收客户端的请求任务,并将该请求任务先加入到当前线程池的预处理队列当中。
69.需要说明的是,在本实施例中,终端设备预先针对线程池的任务调度机制进行改进来实现线程池在tps粒度上的任务处理调节。即,终端设备预先在线程池当中增加预处理队列和待消费队列,如此,终端设备针对客户端提交的请求任务将首先将其加入到预处理队列,之后,再通过一定策略将该请求任务移动到待消费队列当中进行后续处理。
70.具体地,终端设备在线程池当中增加预处理队列和待消费队列时,先设定该线程池自身的线程池队列大小为queuecapacity,而该线程池中预处理队列为pq,待消费队列为tq,则该线程池需满足:pqcapacity《=queuecapacity;tqcapacity《=queuecapacity;和pqsize tqsize《=queuesize。
71.这其中,pqsize代表预处理队列的任务数量,tqsize代表待消费任务队列任务数量,queuesize代表线程池队列大小——线程池队列的第二任务数量。
72.如此,对于增加了预处理队列和待消费队列后的线程池,终端设备会将客户端提交的请求任务先加入到预处理队列,然后,利用当前线程池中的调度模块按照一定策略将该请求任务从预处理队列移动到待消费队列,再然后,通过当前线程池中的worker线程从待消费队列中获取请求任务进行消费。
73.在本实施例中,终端设备通过在线程池当中增加预处理队列和待消费队列来改进线程池的任务调度机制,从而,线程池得以控制每秒消费处理的请求任务的任务数量,实现了将线程池的调节粒度从线程数级别细化到tps级别。
74.优选地,在本实施以及后文所阐述各个实施例当中,上述步骤s10,可以包括:
75.步骤s101,获取预设客户端提交的请求任务的第一任务数量;
76.步骤s102,检测所述第一任务数量与预设线程池队列的第二任务数量之间的大小关系;
77.需要说明的是,在本实施例中,预设线程池队列的第二任务数量即为上述终端设备预先设定的当前线程池的线程池队列大小。
78.终端设备在客户端将请求任务提交到线程池之后,先检测该请求任务以获取得到该全部请求任务的第一任务数量,然后,将该第一任务数量与当前线程池的线程池队列大
小——第二任务数量进行比对,以得到该第一任务数量与该第二任务数量之间的大小关系。
79.步骤s103,若检测到所述大小关系为所述第一任务数量小于所述第二任务数量,则接收所述请求任务并将所述请求任务加入到所述线程池的预处理队列。
80.终端设备在将第一任务数量与第二任务数量进行比对以得到两者的大小关系之后,若该大小关系为该第一任务数量要小于该第二任务数量,则终端设备接收客户端提交到当前线程池当中的请求任务,并将该全部请求任务先加入到当前线程池的预处理队列当中以供后续进行迁移。
81.优选地,在一种可行的实施例中,在上述步骤s102:检测所述第一任务数量与预设线程池队列的第二任务数量之间的大小关系之后,本发明线程池拥塞的控制方法还可以包括:
82.步骤s104,若检测到所述第一任务数量大于或者等于所述第二任务数量,则执行预设的请求拒绝策略。
83.需要说明的是,在本实施例中,预设的请求拒绝策略为终端设备针对当前客户端提交到线程池当中的请求任务进行拒绝接收操作,以等到该请求任务的第一任务数量小于第二任务数量之后,再接收该请求任务进行后续调度和消费处理。当然,应当理解的是,基于实际应用的不同设计需要,在不同可行的实施方式当中,上述的请求拒绝策略当然还可以是除开本实施例所举例以外的其它操作,本发明线程池拥塞的控制方法并不针对该请求拒绝策略的具体内容进行限定。
84.终端设备在将第一任务数量与第二任务数量进行比对以得到两者的大小关系之后,若该大小关系为该第一任务数量要大于或者是等于该第二任务数量,则终端设备将针对客户端提交到当前线程池当中的请求任务,执行预先设定上述的请求拒绝策略,并等到该请求任务的第一任务数量小于第二任务数量之后,再重新接收该客户端提交的请求任务进行后续调度和消费处理。
85.步骤s20,获取所述线程池的拥塞窗口值,并根据所述拥塞窗口值定时从所述预处理队列中拉取所述请求任务,以将所述请求任务迁移至所述线程池的待消费队列作为待处理任务;
86.终端设备在通过多线程针对客户端请求任务进行处理的过程中,按照设定好的时间周期持续的获取线程池最新的拥塞窗口值,从而,终端设备即根据该拥塞窗口值实时的针对当前已经加入到预设处理队列当中的请求任务进行主动拉取迁移,以将拉取得到的该请求任务迁移当前线程池的待消费队列当中,并将迁移到该待消费队列当中的请求任务作为待处理任务以供后续由当前线程池中的消费线程进行消费处理。
87.需要说明的是,在本实施例中,线程池的拥塞窗口值为当前时刻终端设备基于具体消费处理请求任务的下游服务实时的服务能力,来进行动态调整之后最新的拥塞窗口值,该拥塞窗口值为线程池在当前时刻的最优拥塞窗口值。
88.优选地,在本实施例以及后文所阐述其它各个实施例中,上述步骤s20中“根据所述拥塞窗口值定时从所述预处理队列中拉取所述请求任务,以将所述请求任务迁移至所述线程池的待消费队列作为待处理任务”的步骤,可以包括:
89.步骤s201,按照预设的时间周期定时从所述预处理队列中确定所述拥塞窗口值对
应数量的目标请求任务进行主动拉取;
90.步骤s202,将拉取到的所述目标请求任务迁移至所述线程池的待消费队列中作为待处理任务。
91.需要说明的是,在本实施例中,预设的时间周期是终端设备预先设定好定时从预处理队列当中迁移请求任务到待消费队列的时间周期。应当理解的是,基于实际应用的不同设计需要,在不同可行的实施方式当中,终端设备当然可以设置不同的时间周期来定时进行请求任务的迁移。
92.终端设备在通过多线程针对客户端请求任务进行处理的过程中,使用获取到的线程池最新的拥塞窗口值,按照预设的时间周期定时的从预处理队列当中,主动拉取之前已经加入到该队列当中请求任务以将拉取到的请求任务迁移到该线程池的待消费队列当中,并将迁移至待消费队列当中的请求任务标记为待处理任务等待后续由当前线程池中的消费线程进行消费处理。
93.具体地,例如,请参照图4所示的应用流程,终端设备在客户提交请求任务之后,通过线程池任务管理模块将客户提交的请求任务加入到预处理队列(图示等待队列),之后,终端设备通过线程池的拥塞窗口管理模块立即获取线程池在当前时刻经过动态调整后最新的拥塞窗口值,再然后,终端设备即通过线程池的线程池任务调度模块按照之前设定好的时间周期,定时的使用该拥塞窗口值从该预处理队列当中迁移请求任务到待消费队列(图示将任务提交到工作队列,工作队列即为待消费队列),并将迁移至待消费队列当中的请求任务标记为待处理任务等待后续由当前线程池中的消费线程进行消费处理。
94.在本实施例中,终端设备在迁移请求任务的过程中海通过计数器统计每次迁移的数量(假定时间周期为1秒,则统计每秒迁移的数量)。即,设定migratenum为某一秒迁移的请求任务的数量,cwindsize为同一秒线程池最新的拥塞窗口值,如此,终端设备通过线程池任务调度模块按照时间周期(假定是每秒)发起任务迁移以令线程池的worker线程执行迁移动作,且,该worker线程在空闲时,如果migratenum《cwindsize,则该线程主动去预处理队列拉取请求任务,若拉取到请求任务后按照拉取到的请求任务的数量递增migratenum值,若没有拉取到请求任务(预处理队列当中没有客户端提交的请求任务),该线程则进入wait状态以等待预处理队列接收任务后notify唤醒。
95.在本实施例中,终端设备采用定时执行迁移与按照拥塞窗口值主动拉取相结合的策略,从预处理队列将请求任务移动到待消费队列作为待处理任务,能够实现高效迁移请求任务以保障线程池整体的执行效率。
96.步骤s30,从所述待消费队列获取所述待处理任务并发起下游服务调用;
97.终端设备在从预处理队列中迁移请求任务到待消费队列作为待处理任务之后,终端设备即从该待消费队列当中获取该待处理任务,并同时发起下游服务调用来针对获取到的待处理任务进行消费处理。
98.具体地,例如,请参照图4所示的应用流程,终端设备在通过线程池任务调度模块定时从线程池的预处理队列将请求任务迁移到待消费队列中作为待处理任务之后,进一步通过该线程池任务调度模块从该待消费队列当中获取待处理任务,并同时向线程池的rpc(remote procedure call,远程过程调用)模块请求下游服务器来发起下游服务调用,以令调用的下游服务针对该待处理任务进行消费处理。
99.步骤s40,采集发起所述下游服务调用的调用参数,并根据所述调用参数对所述拥塞窗口值进行动态调整。
100.终端设备在发起下游服务调用的过程当中,实时的采集发起该下游服务调用的平均耗时、调用结果等调用参数,从而,终端设备根据该调用参数来针对当前线程池的拥塞窗口值进行动态调整。
101.具体地,例如,请参照图4所示的应用流程,终端设备在通过线程池任务调度模块向rpc模块请求下游服务以发起下游服务调用之后,由rpc模块向该线程池任务调度模块反馈下游服务的调用结果和调用的平均耗时等调用参数,之后,终端设备通过该线程池任务调度模块向线程池的数据采集模块主动登记执行信息以供数据采集模块采集得到该调用结果和该平均耗时等调用参数,进而,终端设备即可通过该线程池当中的拥塞窗口管理模块从数据采集模块获取该调用参数以结合线程池的当前状态,来针对线程池的拥塞窗口值进行更新以实现动态调整。
102.在本实施例中,终端设备在通过多线程针对客户端请求任务进行处理的过程中,首先将客户端提交的请求任务加入到当前线程池的预处理队列当中;然后,按照设定好的时间周期持续的获取线程池最新的拥塞窗口值,从而,终端设备即根据该拥塞窗口值针对当前已经加入到预设处理队列当中的请求任务进行迁移,以将该请求任务迁移当前线程池的待消费队列当中,并将迁移到该待消费队列当中的请求任务作为待处理任务;再然后,终端设备从该待消费队列当中获取该待处理任务,并同时发起下游服务调用来针对获取到的待处理任务进行消费处理;最后,终端设备在发起下游服务调用的过程当中,实时的采集发起该下游服务调用的平均耗时、调用结果等调用参数,从而,终端设备根据该调用参数来针对当前线程池的拥塞窗口值进行动态调整。
103.本发明相比于现有线程池技术,通过动态的针对线程池的拥塞窗口值进行调整,从而令线程池能够始终基于最优的拥塞窗口以充分利用下游服务的能力,实现了既能够避免压垮下游服务或导致下游服务性能进一步恶化,又得以在避免拥塞的情况下充分利用下游服务的能力,有效地降低了处理请求任务的时延。
104.此外,本发明基于增加预处理队列来控制线程池的tps,还使得对线程池动态调节的粒度能够精确到每秒的请求量,实现了线程池在更细粒度上的调节。
105.进一步地,基于上述本发明线程池拥塞的控制方法的第一实施例,提出本发明线程池拥塞的控制方法的第二实施例。
106.本发明线程池拥塞的控制方法的第二实施例与上述第一实施例之间的主要区别在于,在本实施例中,本发明线程池拥塞的控制方法,还可以包括:
107.步骤s50,根据所述拥塞窗口值针对所述线程池的发送窗口进行动态调整,其中,针对所述发送窗口进行动态调整包括:增加线程池的线程数量或者减少所述线程数量。
108.终端设备在通过多线程针对客户端请求任务进行处理的过程中,基于获取到的线程池最新的拥塞窗口值,和线程池当前的状态来增加或者减少线程池的线程数量,以针对线程池的发送窗口进行动态调整。
109.进一步地,上述步骤s50,包括:
110.步骤s501,统计下游服务调用的平均时延,在所述拥塞窗口值大于所述线程池的发送窗口时,根据所述平均时延与所述拥塞窗口值和所述发送窗口之间差值的乘积,增加
所述线程池的线程数量,以针对所述发送窗口进行动态调整;
111.需要说明的是,在本实施例中,终端设备在从待消费队列当中获取待处理任务并发起下游服务调用对该任务进行消费处理的过程中,实时的针对该下游服务调用的平均时延进行统计。
112.此外,线程池的发送窗口的大小决定该线程池处理能力的上限,如此,若假定终端设备设定当前下游服务调用的平均时延为reqtime,而线程池的核心线程数为corepoolsize,则该线程池的发送窗口的大小swindsize=corepoolsize/reqtime。
113.由于线程池大小不能无限扩张,因此,核心线程数corepoolsize需要设定上限maxcorepoolsize;另一方面,因为线程池扩充线程数会有一定的时间开销,因此线程池需要始终维持一定数量的线程用于应对突发的高并发流量,即,核心线程数corepoolsize也需要设定下限mincorepoolsize。如此,线程池的发送窗口的大小即通过线程池的核心线程数corepoolsize进行调节。
114.在本实施例中,线程池的拥塞窗口的大小(即上述拥塞窗口值)决定了线程池在当前时刻实际应该发送请求任务进行消费处理的速度,如,终端设备设定该拥塞窗口的大小为cwindsize,则线程池会按照每秒cwindsize个请求任务的速度进行下游服务调用来进行请求任务的消费处理。而当swindsize《cwindsize时,说明当前的线程数不够,需要增加线程池线程数量。
115.具体地,例如,在本实施例中,终端设备在获取到线程池当前时刻最新的拥塞窗口值cwindsize之后,若该cwindsize》swindsize,即,拥塞窗口值大于线程池的发送窗口的大小,并且,此时线程池的核心线程数corepoolsize小于上限maxcorepoolsize时,终端设备需增加线程池线程数量以调节发送窗口的大小——由于发送窗口大小swindsize=corepoolsize/reqtime,通过统计平均时延reqtime(单位为秒)计算需要新增的线程个数:min(math.ceil((cwindsize-swindsize)*reqtime),maxcorepoolsize-corepoolsize),然后在该corepoolsize的基础上增加该线程个数以对线程池进行实时的动态调整
116.步骤s502,获取所述线程池实时的运行状态,在所述运行状态符合预设条件时减少所述线程数量,以针对所述发送窗口进行动态调整。
117.需要说明的是,在本实施例中,预设条件为:线程池于初始状态或者平稳运行状态下,每秒实际处理的任务数与上述平均时延之间的比值小于核心线程数的状态持续预设时长,其中,该预设时长可基于实际应用的不同设计需要对应设置为不同数值,本发明线程池拥塞的控制方法并不针对该预设时长的具体数值大小进行限定。
118.在本实施例中,当线程池当前处于初始状态或者平稳运行状态时,如果线程池每秒实际处理的任务数为taskpresecond,并且该taskpresecond/reqtime《corepoolsize的状态的持续时间超过了一定的时间阈值,则终端设备获取统计时间内该taskpresecond的平均值:taskpersendcondaverage作为线程池需要减少的线程个数,然后在该corepoolsize的基础上减去该taskpersendcondaverage对线程池进行实时的动态调整。
119.在本实施例中,终端设备在通过多线程针对客户端请求任务进行处理的过程中,基于获取到的线程池最新的拥塞窗口值,和线程池当前的状态来增加或者减少线程池的线程数量,以针对线程池的发送窗口进行动态调整。实现了通过线程池的发送窗口和拥塞窗口两个维度来进行线程池拥塞控制,保障线程池整体的任务处理能力,进而进一步降低了
处理请求任务的时延。
120.进一步地,基于上述本发明线程池拥塞的控制方法的第一实施例,提出本发明线程池拥塞的控制方法的第三实施例。
121.本发明线程池拥塞的控制方法的第三实施例与上述第一实施例之间的主要区别在于,在本实施例中,本发明线程池拥塞的控制方法,还可以包括:
122.步骤s60,获取所述线程池的状态参数,其中,所述状态参数包括:启动状态、初始状态、窗口探测状态、平稳状态和窗口回复状态;
123.终端设备在通过多线程针对客户端请求任务进行处理的过程中,还实时的获取线程池在当前时刻所处的启动状态、初始状态、窗口探测状态、平稳状态或者窗口回复状态,以将该各种状态作为状态参数用于进行对线程池的拥塞窗口值进行动态调整。
124.具体地,例如,请参照如图3所示的场景,线程池的状态分为启动状态、初始状态、窗口探测状态、平稳状态和窗口恢复状态。终端设备初始启动应用时线程池处于启动状态,待线程池初始化完成后,线程池的状态即转到初始转态。此时,如果有客户端提交的请求任务到达终端设备,则线程池的状态将转到窗口探测阶段来获取当前时刻线程池最新的拥塞窗口值,在探测到最新的拥塞窗口值后,线程池的状态将转入平稳状态。此外,当具体消费处理请求任务的下游服务耗时突增以致出现超时等情况时,线程池会降低拥塞窗口值,从而状态将进入窗口恢复阶段,之后,线程池在处于窗口恢复状态或者平稳状态时,如果线程池的空闲时间达到一定的阈值,则线程池的状态又会转到初始状态。终端设备即在上述整个过程当中通过如图4所示拥塞窗口管理模块实时的向线程池状态管理模块查询以获取得到线程池的各种状态作为状态参数。
125.优选地,在一种可行的实施例中,上述步骤s40中“根据所述调用参数对所述拥塞窗口值进行动态调整”的步骤,可以包括:
126.步骤s401,根据所述调用参数和所述状态参数对所述拥塞窗口值进行动态调整。
127.终端设备在根据采集到的发起下游服务调用的调用参数针对线程池的拥塞窗口值进行调整的过程当中,进一步使用该调用参数和实时获取得到的线程池的状态参数一起,来针对该拥塞窗口值进行动态调整,以供终端设备在整个对客户端请求任务进行处理的过程中,均能获取得到线程池在当前时刻经过调整之后最新的拥塞窗口值。
128.优选地,在本实施例中,上述步骤s401,可以包括:
129.步骤s4011,根据所述调用参数和所述状态参数确定对应的拥塞控制策略;
130.步骤s4012,执行所述拥塞控制策略,以所述线程池的历史最拥塞窗口值和初始拥塞窗口因子相乘来计算得出新的拥塞窗口值;或者,执行所述拥塞控制策略,以所述线程池的初始拥塞窗口值和所述初始拥塞窗口因子相乘来计算得出新的拥塞窗口值;
131.步骤s4013,使用所述新的拥塞窗口值对所述拥塞窗口值进行更新。
132.需要说明的是,在本实施例中,拥塞控制策略为终端设备预先结合线程池的状态设定的用于针对线程池的拥塞窗口值进行调整的策略,该策略与线程池所处的状态一一对应(状态不同策略对应也将有所不同)。如,在线程池的状态处于初始状态时,由于网络情况及下游服务负载情况未知,因此需逐步提升拥塞窗口值进行探测,以寻找到一个适合线程池的最优的拥塞窗口值,即,此时终端设备可使用的拥塞控制策略为改进的慢启动算法。
133.此外,线程池的历史最拥塞窗口值为该线程池在前一次从接收请求任务到完成该
对任务进行消费处理的整个过程当中出现的最大的拥塞窗口值,终端设备在该每一个过程均会对该最大的拥塞窗口值进行记录作为线程池的历史最拥塞窗口值。而线程池的初始拥塞窗口值则是由终端设备在线程次首次执行任务时自主指定的拥塞窗口的初始值。
134.具体地,例如,终端设备首先检查上次探测出的线程池的历史最拥塞窗口值lastcwindsize,如果该lastcwindsize《0,即表明当前线程池是首次执行任务,从而终端设备根据指定的初始拥塞窗口值:initcwindsize,来设定线程池此时的拥塞窗口值为cwindsize=initcwindsize*initcwindfactor,其中,initcwindfactor为初始拥塞窗口因子;或者,如果该lastcwindsize》0,则设定线程池此时的拥塞窗口值为cwindsize=lastcwindsize*initcwindfactor;
135.然后,终端设备通过该cwindsize控制每秒线程池发送的请求任务的数量,并统计请求处理的结果,如果结果表示未出现请求超时情况,并且当前待处理任务的个数大于2*cwindsize,则终端设备调整cwindsize=2*cwindsize,并按照调整后新的拥塞窗口值来进行任务处理并统计请求处理的结果,如果结果表示出现了请求超时的情况,则终端设备进一步调整cwindsize=cwindsize/2;
136.最后,终端设备以调整后最新的cwindsize进行任务处理并统计请求处理的结果,如果结果表示未出现超时情况,则调整拥塞窗口值cwindsize=cwindsize*increasefactor,其中increasefactor,为设定的拥塞窗口增长因子,而如果统计的结果表示出现了超时情况,则调整拥塞窗口值cwindsize=cwindsize/increasefactor,且线程池的状态由初始状态转变为平稳状态。
137.此外,终端设备在线程池达到最优的窗口值后处于平稳运行阶段时,拥塞窗口值维持稳定,而一旦下游服务调用出现处理慢和网络拥塞等导致请求超时、平均时延增加时,终端设备此时要执行的拥塞控制策略为先行降低拥塞窗口值,并待网络或下游服务恢复后再尝试提升拥塞窗口值。具体地,例如:
138.终端设备统计线程池在当前每秒实际处理的任务数taskpresecond和超时任务数,如果taskpresecond《cwindsize则维持现状,而如果taskpresecond》=cwindsize,并且超时任务数超小于设定的阈值,更新cwindsize为cwindsize*recoverfactor(恢复因子),并以新的cwindsize进行请求任务的处理,或者,如果taskpresecond》=cwindsize,并且超时任务数超超过了设定的阈值,则终端设备控制线程池的状态进入平稳运行状态。
139.在本实施例中,终端设备在根据采集到的发起下游服务调用的调用参数针对线程池的拥塞窗口值进行调整的过程当中,进一步使用该调用参数和实时获取得到的线程池的状态参数一起,来针对该拥塞窗口值进行动态调整,以供终端设备在整个对客户端请求任务进行处理的过程中,均能获取得到线程池在当前时刻经过调整之后最新的拥塞窗口值。实现了线程池始终基于最优的拥塞窗口以充分利用下游服务的能力,既避免压垮下游服务或导致下游服务性能进一步恶化,又能在避免拥塞的情况下充分利用下游服务的能力,有效地降低了处理请求任务的时延。
140.进一步地,本发明还提供一种线程池拥塞的控制系统。请参照图5,图5为本发明线程池拥塞的控制系统一实施例的功能模块示意图。如图5所示,本发明线程池拥塞的控制系统包括:
141.任务接收模块10,用于接收请求任务并将所述请求任务加入线程池的预处理队
列;
142.任务迁移模块20,用于获取所述线程池的拥塞窗口值,并根据所述拥塞窗口值定时从所述预处理队列中拉取所述请求任务,以将所述请求任务迁移至所述线程池的待消费队列作为待处理任务;
143.服务调用模块30,用于从所述待消费队列获取所述待处理任务并发起下游服务调用;
144.动态调整模块40,用于采集发起所述下游服务调用的调用参数,并根据所述调用参数对所述拥塞窗口值进行动态调整。
145.进一步地,本发明线程池拥塞的控制系统的动态调整模块40,还用于统计下游服务调用的平均时延;以及,在所述拥塞窗口值大于所述线程池的发送窗口时,根据所述平均时延与所述拥塞窗口值和所述发送窗口之间差值的乘积,确定所述线程池新增的线程数量以针对所述发送窗口进行动态调整;或者,根据所述线程池实时的运行状态减少所述线程数量以针对所述发送窗口进行动态调整。
146.进一步地,本发明线程池拥塞的控制系统,还包括:
147.获取模块,用于获取所述线程池的状态参数,其中,所述状态参数包括:启动状态、初始状态、窗口探测状态、平稳状态和窗口回复状态;
148.所述动态调整模块40,还用于根据所述调用参数和所述状态参数对所述拥塞窗口值进行动态调整,即:统计下游服务调用的平均时延,在所述拥塞窗口值大于所述线程池的发送窗口时,根据所述平均时延与所述拥塞窗口值和所述发送窗口之间差值的乘积,增加所述线程池的线程数量,以针对所述发送窗口进行动态调整;或者,获取所述线程池实时的运行状态,在所述运行状态符合预设条件时减少所述线程数量,以针对所述发送窗口进行动态调整。
149.进一步地,所述动态调整模块40,包括:
150.确定单元,用于根据所述调用参数和所述状态参数确定对应的拥塞控制策略;
151.计算单元,用于执行所述拥塞控制策略,以所述线程池的历史最拥塞窗口值和初始拥塞窗口因子相乘来计算得出新的拥塞窗口值;或者,执行所述拥塞控制策略,以所述线程池的初始拥塞窗口值和所述初始拥塞窗口因子相乘来计算得出新的拥塞窗口值,
152.调整单元,用于使用所述新的拥塞窗口值对所述拥塞窗口值进行更新。
153.进一步地,所述任务迁移模块20,还用于按照预设的时间周期定时从所述预处理队列中确定所述拥塞窗口值对应数量的目标请求任务进行主动拉取;以及,将拉取到的所述目标请求任务迁移至所述线程池的待消费队列中作为待处理任务。
154.进一步地,所述任务接收模块10,包括:
155.获取单元,用于获取预设客户端提交的请求任务的第一任务数量;
156.检测单元,用于检测所述第一任务数量与预设线程池队列的第二任务数量之间的大小关系;
157.任务接收单元,用于所述检测单元若检测到所述大小关系为所述第一任务数量小于所述第二任务数量,则接收所述请求任务并将所述请求任务加入到所述线程池的预处理队列。
158.进一步地,所述任务接收模块10,还包括:
159.任务拒绝单元,用于若检测到所述第一任务数量大于或者等于所述第二任务数量,则执行预设的请求拒绝策略。
160.其中,上述线程池拥塞的控制系统中各个模块的功能实现与上述线程池拥塞的控制方法实施例中各步骤相对应,其功能和实现过程在此处不再一一赘述。
161.本发明还提供一种计算机存储介质,该计算机存储介质上存储有线程池拥塞的控制程序,所述线程池拥塞的控制程序被处理器执行时实现如以上任一项实施例所述的线程池拥塞的控制方法的步骤。
162.本发明计算机存储介质的具体实施例与上述线程池拥塞的控制方法各实施例基本相同,在此不作赘述。
163.本发明还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现如以上任一项实施例所述的线程池拥塞的控制方法的步骤。
164.本发明计算机程序产品的具体实施例与上述线程池拥塞的控制方法各实施例基本相同,在此不作赘述。
165.以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献