一种服务器业务请求处理方法和装置
技术领域
本发明涉及计算机通信网络技术和服务器技术领域,具体涉及一种服务器业务请求处理方法和装置。
背景技术
服务器,是指在计算机通信网络中的一个管理资源对外提供业务服务的高性能计算机。服务器类型有很多,例如数据服务器、文件服务器、网页服务器、流媒体服务器、搜索服务器等,它们侦听计算机通信网络中来自计算机客户端或移动通信客户端的业务请求,并对业务请求进行响应和处理,进而为计算机客户端或移动通信客户端提供各种不同的业务服务,丰富了网络应用。计算机通信网络中的服务器随时都面临着数量庞大的业务请求需要执行处理,服务器对业务请求的处理能力自然也成为其业务服务质量的一项重要衡量标准,快速、高效的业务服务更能够提升用户的业务体验以及对业务服务产品的忠诚度。
为了提升服务器业务服务质量,目前服务器都普遍采用了多线程并发执行业务请求处理的方式,以增强服务器的业务请求处理能力。现有服务器通常所采用的多线程并发业务请求处理方式,是每当一个请求到达的时候,服务器都新建一个线程对新到达的业务请求进行处理,直至处理完毕以后再销毁相应的线程;这一方式虽然能够完成对众多业务请求的多线程并发处理,但若在较短时间内有数量过于庞大的业务请求到达服务器时,过多的业务请求处理线程很可能“垄断”占用服务器的系统资源,使得服务器运行效率骤然降低,反而出现业务请求处理的延时较长甚至无响应的情况;不仅如此,由于并发执行大量的业务请求处理时,服务器也同时需要大量地、不间断地创建和销毁线程,这无疑进一步增加了服务器执行业务请求处理的耗时,并且大量地创建、销毁线程自身也进一步的消耗了服务器系统资源,更容易导致服务器无响应、业务服务中断的严重后果。
发明内容
针对现有技术中存在的上述不足,本发明的目的在于提供一种服务器业务请求处理方法和装置,使得服务器能够保持较高的业务请求处理执行效率,进一步增强服务器的业务请求处理性能。
为实现上述目的,本发明采用了如下技术手段:
一种服务器业务请求处理方法,服务器预先创建有限数量的空闲的待用线程;在服务器运行过程中,将接收到的业务请求排队形成请求队列,并分配调用空闲的待用线程对请求队列中尚未处理的业务请求进行处理;被分配调用的待用线程在业务请求处理执行完成后,重新释放为空闲状态,供服务器后续调用。
上述的服务器业务请求处理方法中,作为一种可选择方案,所述“服务器预先创建有限数量的空闲的待用线程”具体为,在服务器启动运行时,创建Nmax个空闲的待用线程,Nmax为预设最大线程数;
在服务器运行过程中,所述“分配调用空闲的待用线程对请求队列中尚未处理的业务请求进行处理”的具体分配调用步骤如下:
1)判断当前时刻请求队列中是否存在尚未处理的业务请求;若是,执行步骤2);否则执行步骤4);
2)判断当前时刻是否存在空闲的待用线程;若是,执行步骤3);否则执行步骤4);
3)分配调用一个空闲的待用线程对请求队列中当前时刻排队最靠前的一个尚未处理的业务请求进行处理,然后立即返回步骤1);
4)经延时Δt后,返回步骤1)。
上述的服务器业务请求处理方法中,作为另一种可选择方案,所述“服务器预先创建有限数量的空闲的待用线程”具体为,在服务器启动运行时,创建N个空闲的待用线程,且N<Nmax,Nmax为预设最大线程数;
在服务器运行过程中,所述“分配调用空闲的待用线程对请求队列中尚未处理的业务请求进行处理”的具体分配调用步骤如下:
a)判断当前时刻请求队列中是否存在尚未处理的业务请求;若是,执行步骤b);否则执行步骤e);
b)判断当前时刻是否存在空闲的待用线程;若是,执行步骤c);否则执行步骤d);
c)分配调用一个空闲的待用线程对请求队列中当前时刻排队最靠前的一个尚未处理的业务请求进行处理,然后立即返回步骤a);
d)判断当前时刻待用线程的总数是否已达到预设最大线程数Nmax;若是,则执行步骤e);否则,再创建一个空闲的待用线程对请求队列中当前时刻排队最靠前的一个尚未处理的业务请求进行处理,然后立即返回步骤a);
e)经延时Δt后,返回步骤a)。
上述的服务器业务请求处理方法中,进一步,所述N的取值范围为1/2~2/3倍预设最大线程数Nmax。
上述的服务器业务请求处理方法中,进一步,所述预设最大线程数Nmax的取值范围为(1±10%)Nthr,Nthr为服务器目标线程数,且有:
Nthr=(1+Tw/Tc)Ncpu;
其中,Ncpu表示服务器的CPU数量;Tc表示业务请求处理过程中执行业务请求解析运算处理的平均持续时间;Tw表示业务请求处理过程中执行服务器数据读写操作的平均持续时间。
上述的服务器业务请求处理方法中,进一步,所述延时Δt的取值范围为50~500ms。
一种服务器业务请求处理装置,包括:
创建模块,用于预先创建有限数量的空闲的待用线程;
排队模块,用于在服务器运行过程中,将接收到的业务请求排队形成请求队列;
调度模块,用于分配调用空闲的待用线程对请求队列中尚未处理的业务请求进行处理;
状态管理模块,用于将被分配调用的待用线程在业务请求处理执行完成后重新释放为空闲状态,供服务器后续调用。
上述的服务器业务请求处理装置中,进一步,所述创建模块包括第一创建单元,用于在服务器启动运行时,创建Nmax个空闲的待用线程,Nmax为预设最大线程数;
则所述调度模块包括第一调度单元,用于判断当前时刻请求队列中是否存在尚未处理的业务请求;若否,则经延时Δt后重新进行所述判断请求队列中是否存在尚未处理的业务请求,若是,则判断当前时刻是否存在空闲的待用线程;若否,则经延时Δt后重新进行所述判断请求队列中是否存在尚未处理的业务请求,若是,则分配调用一个空闲的待用线程对请求队列中当前时刻排队最靠前的一个尚未处理的业务请求进行处理,然后立即返回执行所述判断请求队列中是否存在尚未处理的业务请求。
上述的服务器业务请求处理装置中,进一步,所述创建模块包括第二创建单元,用于在服务器启动运行时创建N个空闲的待用线程,且N<Nmax,Nmax为预设最大线程数;
则所述调度模块包括第二调度单元,用于判断当前时刻请求队列中是否存在尚未处理的业务请求;若否,则经延时Δt后重新进行所述判断请求队列中是否存在尚未处理的业务请求,若是,则判断当前时刻是否存在空闲的待用线程;若是,则分配调用一个空闲的待用线程对请求队列中当前时刻排队最靠前的一个尚未处理的业务请求进行处理,然后立即返回执行所述判断请求队列中是否存在尚未处理的业务请求,若否,则判断当前时刻待用线程的总数是否已达到预设最大线程数Nmax;若是,则经延时Δt后重新进行所述判断请求队列中是否存在尚未处理的业务请求,若否,则再创建一个空闲的待用线程对请求队列中当前时刻排队最靠前的一个尚未处理的业务请求进行处理,然后立即返回执行所述判断请求队列中是否存在尚未处理的业务请求。
上述的服务器业务请求处理装置中,进一步,所述预设最大线程数Nmax的取值范围为(1±10%)Nthr,Nthr为服务器目标线程数,且有:
Nthr=(1+Tw/Tc)Ncpu;
其中,Ncpu表示服务器的CPU数量;Tc表示业务请求处理过程中执行业务请求解析运算处理的平均持续时间;Tw表示业务请求处理过程中执行服务器数据读写操作的平均持续时间。
相比于现有技术,本发明具有如下有益效果:
1、本发明的服务器业务请求处理方法和装置通过分配调用有限数量的待用线程对业务请求进行处理,不仅有效控制了并发执行业务请求处理的线程数量,保证了服务器在运行过程中始终能够保持较高的业务请求处理执行效率,还避免了创建、销毁线程对业务请求处理执行时间和系统资源的消耗,在缩短业务请求处理执行时间的同时也能后利用更多的系统资源提高业务请求处理的执行效率,从而进一步增强了服务器的业务请求处理性能。
2、作为本发明方法和装置的改进方案,可以通过调整待用线程的创建时机以及待用线程的分配调用处理过程,优化服务器启动运行和运行过程中的系统资源分配,并使得服务器能够根据需要自行逐步提升业务请求处理性能。
3、在本发明的服务器业务请求处理方法和装置的应用过程中,还可以根据具体应用场合的服务器硬件条件以及服务器提供的业务服务情况,合理设置预设最大线程数Nmax的值,让服务器的业务请求处理性能得到更为优化和充分的利用。
4、本发明的服务器业务请求处理方法和装置可以广泛应用于任何业务的服务器当中,让服务器提供更加快速、高效的业务服务,提升用户的业务体验以及对业务服务产品的忠诚度。
附图说明
图1为本发明实施例一的服务器业务请求处理方法中执行待用线程分配调用的流程框图;
图2为本发明实施例二的服务器业务请求处理方法中执行待用线程分配调用的流程框图;
图3为本发明实施例三的服务器业务请求处理装置的结构示意图。
具体实施方式
针对现有的服务器多线程并发业务请求处理方式难以保证业务请求处理执行效率,容易出现业务请求处理的延时较长、服务器无响应、甚至业务服务中断等多方面的缺陷,本发明方法提出一种服务器业务请求处理方法。与现有的多线程并发业务请求处理方式不同,本发明方法通过服务器预先创建有限数量的空闲的待用线程;在服务器运行过程中,将接收到的业务请求排队形成请求队列,并分配调用空闲的待用线程对请求队列中尚未处理的业务请求进行处理;被分配调用的待用线程在业务请求处理执行完成后,重新释放为空闲状态,供服务器后续调用。由于服务器通过分配调用有限数量的待用线程对业务请求进行处理,不仅有效控制了并发执行业务请求处理的线程数量,避免了过多的业务请求处理线程“垄断”占用服务器的系统资源而导致业务请求处理执行效率骤然降低、处理延时较长的情况,同时还使得服务器不需要再不间断地反复创建、销毁线程,大幅减少了反复创建、销毁线程所消耗的时间和系统资源,从而让服务器在运行过程中能够保持较高的业务请求处理执行效率,进一步增强了服务器的业务请求处理性能。
下面通过实施例对本发明的效果做进一步说明。
实施例一:
本实施例以一对外提供数据搜索业务的搜索服务器为例,利用本发明的服务器业务请求处理方法执行其数据搜索业务请求处理,借以说明本发明方法的具体应用以及有益效果。搜索服务器接收到数据搜索业务请求后,需要对数据搜索业务请求进行解析获得搜索关键字,并对搜索关键字进行逻辑运算处理获得相应的索引条件,而后对搜索服务器中存储的大量数据索引进行读写匹配操作,从中搜索到满足索引条件的数据返回给请求方,搜索业务请求处理才得以完成。可见搜索服务器执行数据搜索业务请求处理的具体处理任务流程较为复杂,比较消耗时间和系统资源,如何保证业务请求处理执行效率则显得尤为重要。
为此,利用本发明的服务器业务请求处理方法来执行搜索服务器的数据搜索业务请求处理,即,让搜索服务器预先创建有限数量的空闲的待用线程;在搜索服务器运行过程中,将接收到的数据搜索业务请求排队形成请求队列,同时,分配调用空闲的待用线程对请求队列中尚未处理的数据搜索业务请求进行处理;被分配调用的待用线程在数据搜索业务请求处理执行完成后,重新释放为空闲状态,供搜索服务器后续调用。为了简化设计和系统运行流程,在本实施例中,对于待用线程采用了一次性创建、而后调用的实施方式;其具体为,在搜索服务器启动运行时,创建Nmax个空闲的待用线程,Nmax为预设最大线程数;在搜索服务器运行过程中,分配调用空闲的待用线程对请求队列中尚未处理的数据搜索业务请求进行处理的分配调用流程则如图1所示,其具体分配调用步骤如下:
S11,判断当前时刻请求队列中是否存在尚未处理的业务请求;若是,执行步骤S12;否则执行步骤S14;
S12,判断当前时刻是否存在空闲的待用线程;若是,执行步骤S13;否则执行步骤S14;
S13,分配调用一个空闲的待用线程对请求队列中当前时刻排队最靠前的一个尚未处理的业务请求进行处理,然后立即返回步骤S11;
S14,经延时Δt后,返回步骤S11。
由上述的分配调用流程可见,在本实施例的搜索服务器中,如果请求队列中存在尚未处理的数据搜索业务请求且存在空闲的待用线程的情况下,服务器将逐次分配调用空闲的待用线程按照请求队列的排队顺序对尚未处理的数据搜索业务请求进行处理,保证数据搜索业务请求处理的及时执行;而当创建的Nmax个待用线程都已被分配调用,而又存在尚未处理的数据搜索业务请求时,则只能循环的延时Δt,等待有被分配调用的待用线程在数据搜索业务请求处理执行完成而重新释放为空闲状态后,再继续分配调用空闲的待用线程执行数据搜索业务请求处理,由此控制并发执行业务请求处理的线程数量,避免了同时运行过多的数据搜索业务请求处理线程而造成“垄断”占用服务器系统资源、数据搜索业务请求处理执行效率骤然降低的情况,保证搜索服务器在运行过程中始终能够保持较高的数据搜索业务请求处理执行效率;同时,由于搜索服务器启动运行时已创建待用线程,在搜索服务器的运行过程中只需要执行待用线程的分配调用,而无需再创建和销毁线程,完全避免了创建、销毁线程对数据搜索业务请求处理执行时间和系统资源的消耗,业务请求处理执行时间得以缩短,并且业务请求处理执行效率也得以提高,从而进一步增强了搜索服务器的数据搜索业务请求处理性能。在上述分配调用流程的步骤4)中延迟Δt,是为了避免服务器在不存在尚未处理的数据搜索业务请求或者不存在空闲的待用线程时过于频繁的执行检测判断操作,当然延迟Δt的值也不应当过大,否则会影响待用线程的分配调用效率;从这些因素考虑,延时Δt的取值范围在50~500ms之间较为适宜。
在本发明的服务器业务请求处理方法中,如果要使得服务器的业务请求处理性能得到更为优化和充分的利用,则可以根据具体服务器硬件条件以及服务器提供的业务服务情况来设置预设最大线程数Nmax。作为服务器的硬件条件,服务器的CPU数量越多,则表明服务器的业务请求处理性能基础越优秀,服务器可同时运行的线程数也越多;服务器CPU的运算处理能力越强,其在业务请求处理过程中执行业务请求解析运算处理的平均持续时间就越短,越有助于提高业务请求处理速率。而服务器所提供业务服务的数据需求量大小对业务请求处理执行时间也存在较大影响,业务服务的数据需求量越大,自然在业务请求处理过程中执行服务器数据读写操作的平均持续时间就越长,因此业务请求处理执行时间也越长。而在不同的实际应用场合中,服务器硬件条件以及服务器提供的业务服务情况可能各有不同,因此在应用本发明的服务器业务请求处理方法时,技术人员可以根据服务器硬件条件及其所提供业务服务的具体情况,凭借经验来设置预设最大线程数Nmax的较适宜取值。
但是,若预设最大线程数Nmax的取值过大,将可能导致并发执行业务请求处理的待用线程数量过多,影响业务请求处理执行效率;而若预设最大线程数Nmax的取值过小,则服务器应有的业务请求处理性能又不能够得以充分的利用。为此,基于对服务器硬件条件及其所提供业务服务情况的综合考虑,可以按下式计算获得服务器目标线程数Nthr:
Nthr=(1+Tw/Tc)Ncpu;
其中,Ncpu表示服务器的CPU数量;Tc表示业务请求处理过程中执行业务请求解析运算处理的平均持续时间;Tw表示业务请求处理过程中执行服务器数据读写操作的平均持续时间。服务器的CPU数量Ncpu体现了服务器的硬件基础性能;业务请求处理过程中执行业务请求解析运算处理的平均持续时间Tc体现了服务器CPU的运算处理能力;业务请求处理过程中执行服务器数据读写操作的平均持续时间Tw体现了业务服务自身的数据需求量;这些数据可以通过对服务器过往业务请求处理过程加以统计而获得。综合考量服务器硬件因素以及服务业务自身因素获得服务器目标线程数Nthr后,服务器的预设最大线程数Nmax则可以根据实际情况在(1±10%)Nthr的范围内取值,保证预设最大线程数Nmax的取值趋于合理化,使得服务器的业务请求处理性能得到更为优化和充分的利用。例如,对于本实施例的搜索服务器而言,服务器的CPU数量Ncpu=4,而由于数据搜索过程中需要进行读写匹配操作的数据量较大,在数据搜索业务请求处理过程中,通常执行服务器数据读写操作的平均持续时间与执行业务请求解析运算处理的平均持续时间之比为9:1左右,因此,针对本实施例搜索服务器的情况,预设最大线程数Nmax在40~48之间取值较为适宜。
实施例二:
由于服务器在启动运行时,通常需要对较多的系统数据执行初始化处理,其初始化自身就需要消耗较多的系统资源;如果采用实施例一所述的服务器业务请求处理实施方式,在服务器启动运行时就创建非常多的待用线程,则会进一步消耗系统资源,导致服务器初始化处理执行缓慢而长时间不能启动至正常运行状态,影响服务器的启动操作。为了降低这种不利影响,本实施例提供了一种更为优化的服务器业务请求处理方法,在服务器启动运行时,先创建一部分的待用线程,例如创建N个空闲的待用线程,N<Nmax,Nmax为预设最大线程数;在服务器运行过程中,分配调用空闲的待用线程对请求队列中尚未处理的业务请求进行处理时,则按下述的分配调用步骤执行,其流程如图2所示:
S21,判断当前时刻请求队列中是否存在尚未处理的业务请求;若是,执行步骤S22;否则执行步骤S25;
S22,判断当前时刻是否存在空闲的待用线程;若是,执行步骤S23;否则执行步骤S24;
S23,分配调用一个空闲的待用线程对请求队列中当前时刻排队最靠前的一个尚未处理的业务请求进行处理,然后立即返回步骤S21;
S24,判断当前时刻待用线程的总数是否已达到预设最大线程数Nmax;若是,则执行步骤S25;否则,S26:再创建一个空闲的待用线程对请求队列中当前时刻排队最靠前的一个尚未处理的业务请求进行处理,然后立即返回步骤S21;
S25,经延时Δt后,返回步骤S21。
参见上述的待用线程分配调用流程,在请求队列中存在尚未处理的业务请求且存在空闲的待用线程的情况下,待用线程的分配调用方式与实施例一是相一致的,能够逐次分配调用空闲的待用线程按照请求队列的排队顺序对尚未处理的业务请求进行处理;不同之处在于,在请求队列中存在尚未处理的业务请求而不存在空闲的待用线程的情况下,服务器则会在待用线程分配调用的过程中陆续创建新的待用线程对尚未处理的业务请求进行处理,直至待用线程的总数已达到预设最大线程数Nmax为止。这样一来,可以通过在服务器启动运行时创建较少的待用线程,减弱线程创建处理对服务器启动初始化操作的不利影响,保证服务器迅速正常运行后,在服务器运行过程中有需要的时候再陆续建立待用线程,从而让服务器始终保持较高的业务请求处理执行效率;在服务器运行过程中后续建立的待用线程在业务请求处理执行完成后也不需要毁灭掉,而是重新释放为空闲状态,继续作为服务器的线程资源等待后续调用,从而使得服务器的业务请求处理性能能够根据需要自行逐步提升至最佳,并最终保持在性能最佳状态。当然,为了保证服务器在启动运行过后正常运行的初期也能够具备比较优良的业务请求处理性能,在服务器启动运行时创建的待用线程数N不宜过少,通常情况下取N为1/2~2/3倍预设最大线程数Nmax较为适宜。同时,本实施例也可以采用实施例一中所述的方式确定预设最大线程数Nmax的取值,以保证服务器的业务请求处理性能可以得到更为优化和充分的利用。
实施例三:
对应的,本发明还提供了一种服务器业务请求处理装置,该装置可以集成于服务器中,也可以作为服务器外的独立装置。该装置的结构如图3所示,包括:
创建模块10,用于预先创建有限数量的空闲的待用线程;
排队模块20,用于在服务器运行过程中,将接收到的业务请求排队形成请求队列;
调度模块30,用于分配调用空闲的待用线程对请求队列中尚未处理的业务请求进行处理;
状态管理模块40,用于将被分配调用的待用线程在业务请求处理执行完成后重新释放为空闲状态,供服务器后续调用。
具体的,所述创建模块10可以包括第一创建单元,用于在服务器启动运行时,创建Nmax个空闲的待用线程,Nmax为预设最大线程数;
则调度模块30具体可以包括第一调度单元,用于判断当前时刻请求队列中是否存在尚未处理的业务请求;若否,则经延时Δt后重新进行所述判断请求队列中是否存在尚未处理的业务请求,若是,则判断当前时刻是否存在空闲的待用线程;若否,则经延时Δt后重新进行所述判断请求队列中是否存在尚未处理的业务请求,若是,则分配调用一个空闲的待用线程对请求队列中当前时刻排队最靠前的一个尚未处理的业务请求进行处理,然后立即返回执行所述判断请求队列中是否存在尚未处理的业务请求。
所述创建模块10还可以是具体包括第二创建单元,用于在服务器启动运行时,创建N个空闲的待用线程,且N<Nmax,Nmax为预设最大线程数;
则调度模块30具体可以包括第二调度单元,用于判断当前时刻请求队列中是否存在尚未处理的业务请求;若否,则经延时Δt后重新进行所述判断请求队列中是否存在尚未处理的业务请求,若是,则判断当前时刻是否存在空闲的待用线程;若是,则分配调用一个空闲的待用线程对请求队列中当前时刻排队最靠前的一个尚未处理的业务请求进行处理,然后立即返回执行所述判断请求队列中是否存在尚未处理的业务请求,若否,则判断当前时刻待用线程的总数是否已达到预设最大线程数Nmax;若是,则经延时Δt后重新进行所述判断请求队列中是否存在尚未处理的业务请求,若否,则再创建一个空闲的待用线程对请求队列中当前时刻排队最靠前的一个尚未处理的业务请求进行处理,然后立即返回执行所述判断请求队列中是否存在尚未处理的业务请求。
上述预设最大线程数Nmax的取值范围为(1±10%)Nthr,Nthr为服务器目标线程数,且可以有:
Nthr=(1+Tw/Tc)Ncpu;
其中,Ncpu表示服务器的CPU数量;Tc表示业务请求处理过程中执行业务请求解析运算处理的平均持续时间;Tw表示业务请求处理过程中执行服务器数据读写操作的平均持续时间。
综合上述三个实施例的举例说明,可以看到,本发明的服务器业务请求处理方法及装置通过分配调用有限数量的待用线程对业务请求进行处理,不仅有效控制了并发执行业务请求处理的线程数量,保证了服务器在运行过程中始终能够保持较高的业务请求处理执行效率,还避免了创建、销毁线程对业务请求处理执行时间和系统资源的消耗,在缩短业务请求处理执行时间的同时也能后利用更多的系统资源提高业务请求处理的执行效率,从而进一步增强了服务器的业务请求处理性能;同时,在本发明的服务器业务请求处理方法和装置的应用过程中,还可以根据具体应用场合的服务器硬件条件以及服务器提供的业务服务情况,合理设置预设最大线程数Nmax的值,让服务器的业务请求处理性能得到更为优化和充分的利用;此外,通过调整本发明方法和装置中待用线程的创建时机以及待用线程的分配调用处理过程,可以优化服务器启动运行和运行过程中的系统资源分配,并使得服务器能够根据需要自行逐步提升业务请求处理性能。本发明的服务器业务请求处理方法及装置不仅仅可以应用于实施例中涉及的搜索服务器,其可以广泛应用于任何业务的服务器当中,让服务器提供更加快速、高效的业务服务,提升用户的业务体验以及对业务服务产品的忠诚度。
最后说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的宗旨和范围,其均应涵盖在本发明的权利要求范围当中。