多线程服务退出方法、装置、存储介质和计算机设备制造方法及图纸

技术编号:37407957 阅读:17 留言:0更新日期:2023-04-30 09:34
本申请提供了一种多线程服务退出方法、装置、存储介质、计算机设备。该方法包括:初始化记录原子变量,以使记录原子变量的计数位清零以及状态位表示目标服务处于运行状态;响应于任意一个线程对目标服务的调用请求,获取状态位;判断状态位是否表示目标服务处于停止状态,若是,则反馈错误调用信息,若否,则使计数位增加第一数值,并执行目标服务对应的业务逻辑,以及在业务逻辑执行完成后,使计数位减少第一数值;响应于针对目标服务的停止服务请求,对状态位进行更新,以使状态位表示目标服务处于停止状态,并在计数位清零的情况下,执行目标服务对应的退出逻辑。该方法通过无锁的方案解决服务退出逻辑冲突问题,提高运行效率。率。率。

【技术实现步骤摘要】
多线程服务退出方法、装置、存储介质和计算机设备


[0001]本申请涉及计算机
,尤其涉及一种多线程服务退出方法、装置、存储介质和计算机设备。

技术介绍

[0002]随着计算机技术的发展,许多软件程序会通过对外开放接口的方式提供对应的服务。而许多软件程序是在多线程环境下运行的,当某一接口服务已停止服务时会有其他线程继续调用该接口服务。停止退出接口服务的逻辑和接口本身的业务逻辑会出现并发重叠,从而造成程序崩溃。传统方案是加锁来解决,但对于频繁调用的接口来说,频繁加锁放锁会影响运行效率。

技术实现思路

[0003]本申请的目的旨在至少能解决上述的技术缺陷之一,特别是现有技术中健壮性测试结果不够准确的技术缺陷。
[0004]第一方面,本申请实施例提供了一种多线程服务退出方法,包括:
[0005]初始化记录原子变量,以使记录原子变量的计数位清零以及状态位表示目标服务处于运行状态;
[0006]响应于任意一个线程对目标服务的调用请求,获取状态位;
[0007]判断状态位是否表示目标服务处于停止状态,若是,则反馈错误调用信息,若否,则使计数位增加第一数值,并执行目标服务对应的业务逻辑,以及在业务逻辑执行完成后,使计数位减少第一数值;
[0008]响应于针对目标服务的停止服务请求,对状态位进行更新,以使状态位表示目标服务处于停止状态,并在计数位清零的情况下,执行目标服务对应的退出逻辑。
[0009]在其中一个实施例中,记录原子变量为多位整数型原子变量,记录原子变量的最低位为状态位,记录原子变量的其余位为计数位。
[0010]在其中一个实施例中,获取状态位包括:
[0011]读取记录原子变量;
[0012]将读取结果与1做与运算,得到状态位。
[0013]在其中一个实施例中,第一数值为2。
[0014]在其中一个实施例中,状态位等于1时,状态位表示目标服务处于停止状态,状态位等于0时,状态位表示目标服务处于运行状态。
[0015]在其中一个实施例中,使计数位增加第一数值,包括:
[0016]利用原子增操作使计数位增加第一数值。
[0017]在其中一个实施例中,使计数位减少第一数值,包括:
[0018]利用原子减操作使计数位减少第一数值。
[0019]第二方面,本申请实施例提供了一种多线程服务退出装置,包括:
[0020]初始化模块,用于初始化记录原子变量,以使记录原子变量的计数位清零以及状态位表示目标服务处于运行状态;
[0021]第一处理模块,用于响应于任意一个线程对目标服务的调用请求,获取状态位;
[0022]第二处理模块,用于判断状态位是否表示目标服务处于停止状态,若是,则反馈错误调用信息,若否,则使计数位增加第一数值,并执行目标服务对应的业务逻辑,以及在业务逻辑执行完成后,使计数位减少第一数值;
[0023]第三处理模块,用于响应于针对目标服务的停止服务请求,对状态位进行更新,以使状态位表示目标服务处于停止状态,并在计数位清零的情况下,执行目标服务对应的退出逻辑。
[0024]第三方面,本申请实施例提供了一种计算机设备,包括一个或多个处理器,以及存储器,存储器中存储有计算机可读指令,计算机可读指令被一个或多个处理器执行时,执行上述任一实施例中的多线程服务退出方法的步骤。
[0025]第四方面,本申请实施例提供了一种存储介质,存储介质中存储有计算机可读指令,计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行上述任一实施例中的多线程服务退出方法的步骤。
[0026]从以上技术方案可以看出,本申请实施例具有以下优点:
[0027]基于上述任一实施例,首先设置一个包含状态位和计数位的记录原子变量,在目标服务对外开始服务前初始化记录原子变量,表示目标服务当前的服务对象为零且目标服务正处于运行状态。对处理任意一个线程对目标服务的调用请求时,若状态位反映目标服务处于停止状态,则直接向请求方反馈错误调用信息,无法对调用请求进行处理。若状态位反映目标服务处于运行状态,则通过对计数位的修改统计目标服务正在服务的对象数量,并按照目标服务原先的业务逻辑处理请求方的调用请求。当目标服务接收到停止服务请求时,将状态位调整为表示目标服务处于停止状态,目标服务不会对新的调用请求提供服务,并根据计数位的统计情况判定当前的所有调用处理完成后,执行目标服务的退出逻辑。本实施例中的方法通过无锁的方案解决多线程服务退出时的逻辑冲突问题,采用单一的记录原子变量而非两个独立的原子变量避免了多线程变量操作过程中可能出现的活锁问题,大大提高了多线程服务退出的稳定性和运行效率。
附图说明
[0028]为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。
[0029]图1为本申请一个实施例提供的服务端测试方法的流程示意图;
[0030]图2为本申请另一个实施例提供的服务端测试方法的流程示意图;
[0031]图3为本申请实施例提供的计算机设备的内部结构图。
具体实施方式
[0032]下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完
整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0033]第一方面,本申请实施例提供了一种多线程服务退出方法,请参阅图1,包括步骤S102至步骤S108。
[0034]S102,初始化记录原子变量,以使记录原子变量的计数位清零以及状态位表示目标服务处于运行状态。
[0035]可以理解,在多线程环境下,对每个线程都可能涉及对某个变量的值进行修改,而对一个变量进行修改需要经过读取、修改和回写三个步骤,在某个线程在执行其中一个步骤时,该变量可能也在被其他线程处理,最终导致该变量出现不符合预期的变化。而在程序中使用原子变量可以保证任意一个线程对原子变量进行操作时不会被其他线程干扰。记录原子变量即为本实施例中用来对接口服务的情况进行记录的原子变量。记录原子变量是一个多位(bit)的二进制变量,记录原子变量的各个位中包括计数位和状态位。其中,状态位用于表示目标服务当前的状态为运行状态或者停止状态,处于运行状态的目标服务可以通过接口向外部提供服务,而处于停止状态的目标服务器则不能。而计数位则代表目标服务处于运行状态时,当前所服务的对象的数量。在对目标服务进行初始化的阶段,即先对记录原子变量进行初始化,在初始化的状态下,目标服务的服务对象为零,因此,将记录原子变量的计数位清零。而为了使目标服务可调用,初始化时还要保证状态位表本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种多线程服务退出方法,其特征在于,包括:初始化记录原子变量,以使所述记录原子变量的计数位清零以及状态位表示目标服务处于运行状态;响应于任意一个线程对所述目标服务的调用请求,获取所述状态位;判断所述状态位是否表示所述目标服务处于停止状态,若是,则反馈错误调用信息,若否,则使所述计数位增加第一数值,并执行所述目标服务对应的业务逻辑,以及在所述业务逻辑执行完成后,使所述计数位减少所述第一数值;响应于针对所述目标服务的停止服务请求,对所述状态位进行更新,以使所述状态位表示所述目标服务处于停止状态,并在所述计数位清零的情况下,执行所述目标服务对应的退出逻辑。2.根据权利要求1所述的多线程服务退出方法,其特征在于,所述记录原子变量为多位整数型原子变量,所述记录原子变量的最低位为所述状态位,所述记录原子变量的其余位为所述计数位。3.根据权利要求2所述的多线程服务退出方法,其特征在于,所述获取所述状态位包括:读取所述记录原子变量;将读取结果与1做与运算,得到所述状态位。4.根据权利要求2所述的多线程服务退出方法,其特征在于,所述第一数值为2。5.根据权利要求4所述的多线程服务退出方法,其特征在于,所述状态位等于1时,所述状态位表示所述目标服务处于所述停止状态,所述状态位等于0时,所述状态位表示所述目标服务处于所述运行状态。6.根据权利要求1所述的多线程服务退出方法,其特征在于,所述使所述计数位增加第一数值,包括:利用原子增操作使所述计数位增加所述第...

【专利技术属性】
技术研发人员:刘源
申请(专利权)人:广州文远知行科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1