一种获取任务进度的方法、终端设备及存储介质与流程

文档序号:16326698发布日期:2018-12-19 05:57阅读:159来源:国知局
一种获取任务进度的方法、终端设备及存储介质与流程

本发明涉及计算机领域,尤其涉及一种获取任务进度的方法、终端设备及存储介质。

背景技术

计算机进行任务处理时,会创建大量线程进行异步的计算。例如,要统计一些主播的信息,程序会根据主播的id或uid,开启多个线程分别计算对应的类别的数据。这种并行的计算方法能提高计算效率,加快响应。但多个线程计算时,只能得到总的计算结果,对于每个线程执行状态并不了解。

目前,常用的方法是直接在每个线程的run()函数中定义任务状态获取方法,然后通过计数对每个线程执行进度监控。这种通过统计各任务是否执行完毕的方法,在线程并发时,由于存在线程安全问题,致使获取到的任务进度信息准确性较低。



技术实现要素:

有鉴于此,本发明实施例提供了一种获取任务进度的方法、终端设备及存储介质,以解决统计任务进度时存在线程安全的问题。

本发明实施例的第一方面,提供了一种数据同步方法,包括:

主线程接收到数据处理任务后,创建预设数量的子线程,并设定countdownlatch的初始值为子线程的数量;

在所述创建的每个子线程中定义当前子线程对应的任务执行方法和获取当前子线程任务执行进度的方法;

当子线程执行任务成功或异常时,将所述countdownlatch值减一,并根据当前所述countdownlatch值,计算所述子线程当前任务的完成进度。

本发明实施例的第二方面,提供了一种终端设备,包括:

创建模块:用于主线程接收到数据处理任务后,创建预设数量的子线程,并设定countdownlatch的初始值为子线程的数量;

定义模块:用于在所述创建的每个子线程中定义当前子线程对应的任务执行方法和获取当前子线程任务执行进度的方法;

计算模块:用于当子线程执行任务成功或异常时,将所述countdownlatch值减一,并根据当前所述countdownlatch值,计算所述子线程当前任务的完成进度。

本发明实施例的第三方面,提供了一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如本发明实施例第一方面所述方法的步骤。

本发明实施例的第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现本发明实施例第一方面提供的所述方法的步骤。

本发明实施例的第五方面,提供了一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被一个或多个处理器执行时实现本发明实施例第一方面提供的所述方法的步骤。

本发明实施例中,通过countdownlatch来对子线程中任务的执行状况计数,进而统计已完成执行的任务在分配的任务量中的占比,确定任务执行进度。这种通过countdownlatch获得线程封闭锁的方式,能够保障线程安全,使得计数的更准确,进而得到的任务进度信息也更加可靠。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的获取任务进度方法的一个实施例流程图;

图2为本发明实施例提供的获取任务进度方法的另一个实施例流程图;

图3为本发明实施例提供的获取任务进度的终端设备的结构示意图;

图4为本发明实施例提供的终端装置的结构示意图。

具体实施方式

本发明实施例提供了一种获取任务进度的方法、终端设备及存储介质,用于保障线程安全,准确获取任务进度。

为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是本发明一部分实施例,而非全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

实施例一:

请参阅图1,本发明实施例提供的获取任务进度方法的流程示意图,包括以下步骤:

s101、主线程接收到数据处理任务后,创建预设数量的子线程,并设定countdownlatch的初始值为子线程的数量;

所述主线程是在启动程序时,系统自动创建的一个线程。可以通过主线程创建主线程进行任务分配处理,所述处理任务一般为系统下达的对特定数据进行逻辑处理的指令。当系统需要处理某类数据时,会根据主线程生成子线程进行并行处理,这种多个子线程并行处理能够加快处理速度,但为了实现负载均衡,创建的子线程会有一定限量。在本发明实施例中,所述预设数量一般可根据处理的数据量或cpu性能等参数来确定。

所述countdownlatch是一个同步辅助类,在完成一组正在执行的线程之前,允许一个或多个线程等待,其功能相当于一个封闭锁,在该封闭锁中的线程在执行完前不会被阻断。在countdownlatch中有个计数器,该计数器值可以设定为需要同步执行的线程数量。将创建的子线程通过countdownlatch计数,可以保障线程安全,且使得同步线程的间的计数不会发生干扰。

可选的,所述创建预设数量的子线程还包括:划分处理任务,为每个子线程分配执行任务量。在本发明实施例中所述处理任务为计算某一类数据,例如当该类数据有10000个,可创建100个线程,每个线程计算100个该类数据。所述分配可以均等分配计算量也可以不均等。进一步的,在设定countdownlatch的初始值为子线程的数量前初始化一个countdownlatch。

s102、在所述创建的每个子线程中定义当前子线程对应的和获取当前子线程任务执行进度的方法;

在每一个线程中,所述任务执行方法为具体的业务处理逻辑,例如对数据加权计算,该任务执行方法可以定义在其他类中,然后在当前线程引用该类的执行方法。

所述获取任务执行进度的方法,即统计已经执行过的线程的方法,所述执行进度是通过计算当前已经执行的任务在分配的任务量中的占比。由于每个线程中分配的任务可能包含多个分任务,这些分任务共用一套业务处理逻辑,根据对分任务是否执行完毕,就可以确定该线程是否已经执行完成,或还在执行中,这样方便量化任务处理进度。

可选的,为每个子线程命名后,在每个子线程的run方法中,定义当前子线程对应的任务执行方法;

设定当前子线程的执行任务对应的每个分任务执行成功或出现异常时,将当前子线程的countdownlatch值减一;所述countdownlatch值通过定义的变量,来实现初始值的递减操作。

根据所述变量值和为当前子线程分配的任务量,计算当前子线程的任务执行进度。

s103、当子线程执行任务成功或异常时,将所述countdownlatch值减一,并根据当前所述countdownlatch值,计算所述子线程当前任务的完成进度。

所述执行成功或错误一般指执行分任务时,是否发生了异常。所述分任务指的是在子线程中执行的任务,这些任务有多个个且共用一套处理逻辑,在批量处理数据时,多个子线程中处理的数据方法相同,对每个数据的处理相当于一个分任务。

所述countdownlatch值减一,即计时器值减一,每调用一次countdownlatch,countdownlatch的值自动减一。

所述任务执行进度指的是在当前子线程中,已经完成的分任务,与分配的任务量的比例,这样计算不仅可以确定在子线程中任务是否完成,没完成则已完成的进度是多少。

可选的,获取当前子线程的名称,并将当前子线程的名称存入数据库。将子线程名称保存,并实时存入计算获得的任务进度,这样子线程名对应线程进度能过方便查看及获取这些数据。

可选的,创建变量,通过所述变量分别记录所述子线程中分任务执行成功的数量和出错的数量,根据所述子线程已执行的分配的任务量,计算所述子线程当前任务执行的成功率或出错率。每个子线程都分配一定数量的任务,每个任务内容相同或不同,根据每个任务的成功与否,及已经执行过的任务数量,计算比例,可以得到当前子线程的任务成功率率或出错率。

上述运用countdownlatch的原理,既可以计数,又能保障线程安全,从而获取任务的进度信息不仅便捷而且准确。

实施例二:

在图1的基础上,结合图2以获取一个子线程的任务进度为例,结合代码,详述获取过程,如下:

图2为本发明实施例提供的获取任务进度的流程示意图,包括步骤s21、s22、s23、s24、s25、s26,上述步骤并不意味着执行顺序的先后。

对于需要处理的数据采用不同方式处理的,可以创建不同线程分别处理。对于待处理的数据为同种处理方式的,创建线程等量处理。在本发明实施例中,以计算主播uid为例,如有10000个uid需要进行逻辑运算,可以创建100个子线程。具体可通过实例化线程类实现。

所述步骤s22在实例化countdownlatch类时,将countdownlatch的计数设置为子线程数,具体代码为:countdownlatchcountdownlatch=newcountdownlatch(thread_number)。

countdownlatch类中有一个countdown方法,每调用一次,计数值自动减1,在每个线程中调用countdown方法,通过计数的变化就能判断该线程是否执行完成。

每个线程在进行uid逻辑运算前,线程需要先调用start方法启动线程,然后再在run方法中,定义业务的逻辑处理。这部分可以直接将处理逻辑写入run方法中,也可以调用已经定义好的处理方法。

优选的,定义try-catch结构捕获异常,分别在try和catch中定义获取线程名及将线程名存入数据库,这样当前线程的执行进度可以被直观的显示。上述获取线程名及将线程名存入数据库可通过的getname方法和savetomysql方法实现。

所述步骤s206中,在finally里调用countdown方法,即无论业务逻辑部分是否执行成功,都要执行计数减一操作。调用countdown方法进行计数减一还表明当前线程已经执行过一次,也即分配的任意任务已完成一次计算,这样再根据当前线程分配的任务量,和已经执行过的任务量,就可以计算出当前线程的任务进度。

可选的,还可以通过countdownlatch的计数,得到业务逻辑的执行成功率或失败率。

本发明实例中,由于countdownlatch是线程安全的,并发的多线程进行的操作是原子性的,不会有误读和脏数据,因此多线程都保存有countdownlatch的句柄,然后进行操作。

实施例三:

上面主要描述了一种获取任务进度的方法,下面将对一种获取任务进度的终端设备进行详细描述。

图3示出了本发明实施例提供的获取任务进度的终端设备的结构示意图,包括:

创建模块310:用于主线程接收到数据处理任务后,创建预设数量的子线程,并设定countdownlatch的初始值为子线程的数量;

所述countdownlatch是一个同步辅助类,在完成一组正在执行的线程之前,允许一个或多个线程等待,其功能相当于一个封闭锁,在该封闭锁中的线程在执行完前不会被阻断。在countdownlatch中有个计数器,该计数器值可以设定为需要同步执行的线程数量。将创建的子线程通过countdownlatch计数,可以保障线程安全,且使得同步线程的间的计数不会发生干扰。

可选的,所述创建模块310包括:

分配单元:用于划分处理任务,为每个子线程分配执行任务量。

定义模块320:用于在所述创建的每个子线程中定义当前子线程对应的任务执行方法和获取当前子线程任务执行进度的方法;

可选的,所述定义模块320包括:

定义单元:用于为每个子线程命名后,在每个子线程的run方法中,定义当前子线程对应的任务执行方法;

设定单元:用于设定当前子线程的执行任务对应的每个分任务执行成功或出现异常时,将当前子线程的countdownlatch值减一;

当countdownlatch类中的countdown方法时,就可以实现计数值自动减1。

计算单元:用于根据所述变量值和为当前子线程分配的任务量,计算任务执行进度。

在所述计算单元设定线程进度计算规则,该计算规则主要为计算已完成任务在分配的任务量的占比,所述已完成任务指的是运行任务执行方法,无论是否出现异常,都算作任务被执行。

计算模块330:用于当子线程执行任务成功或异常时,将所述countdownlatch值减一,并根据当前所述countdownlatch值,计算所述子线程当前任务的完成进度。

可选的,所述计算模块330具体包括:

计算一单元:用于根据countdownlatch计数值和为当前子线程分配的任务量,计算任务执行进度。

可选的,所述计算模块330包括:

存储单元:用于获取当前子线程的名称,并将当前子线程的名称存入数据库。

可选的,所述计算模块330还包括:

计算二单元:创建变量,通过所述变量分别记录所述子线程中分任务执行成功的数量和出错的数量,根据所述子线程已执行的分配的任务量,计算所述子线程当前任务执行的成功率或出错率。

上述的终端设备,可以获取到任务执行进度,并显示出来,方便把控任务执行质量。

实施例四:

图4是本发明一实施例提供的网络性能参数采集终端设备结构的示意图。所述终端设备,为具备触摸屏的移动计算机设备,包括但不限于智能手机、智能手表、笔记本、平板电脑、pos机甚至包括车载电脑。如图4所示,该实施例的终端设备4包括:存储器410、处理器420以及系统总线430,所述存储器410包括存储其上的可运行的程序4101,本领域技术人员可以理解,图4中示出的终端设备结构并不构成对终端设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

下面结合图4对终端设备的各个构成部件进行具体的介绍:

存储器410可用于存储软件程序以及模块,处理器420通过运行存储在存储器410的软件程序以及模块,从而执行终端的各种功能应用以及数据处理。存储器410可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据终端设备的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器410可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。

在存储器410上包含网络性能参数采集方法的可运行程序4101,所述可运行程序4101可以被分割成一个或多个模块/单元,所述一个或多个模块/单元被存储在所述存储器410中,并由处理器420执行,以完成通知的传递并获取通知实现过程,所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序4101在所述终端设备4中的执行过程。例如,所述计算机程序4101可以被分割为创建模块、定义模块和计算模块。

处理器420是终端设备的控制中心,利用各种接口和线路连接整个终端设备的各个部分,通过运行或执行存储在存储器410内的软件程序和/或模块,以及调用存储在存储器410内的数据,执行终端的各种功能和处理数据,从而对终端进行整体监控。可选的,处理器420可包括一个或多个处理单元;优选的,处理器420可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器420中。

系统总线430是用来连接计算机内部各功能部件,可以传送数据信息、地址信息、控制信息,其种类可以是例如pci总线、isa总线、vesa总线等。处理器420的指令通过总线传递至存储器410,存储器410反馈数据给处理器420,系统总线430负责处理器420与存储器410之间的数据、指令交互。当然系统总线430还可以接入其他设备,例如网络接口、显示设备等。

所述终端设备应至少包括cpu、芯片组、内存、磁盘系统等,其他构成部件在此不再赘述。

在本发明实施例中,该终端设备所包括的处理器420执行的可运行程序具体为:

一种获取任务进度的方法,包括:

主线程接收到数据处理任务后,创建预设数量的子线程,并设定

countdownlatch的初始值为子线程的数量;

在所述创建的每个子线程中定义当前子线程对应的任务执行方法和获取当前子线程任务执行进度的方法;

当子线程执行任务成功或异常时,将所述countdownlatch值减一,并根据当前所述countdownlatch值,计算所述子线程当前任务的完成进度。

进一步的,所述创建预设数量的子线程还包括:

划分处理任务,为每个子线程分配执行任务量。

进一步的,所述在每个子线程中定义当前子线程对应的任务执行方法和获取当前子线程任务执行进度的方法具体为:

为每个子线程命名后,在每个子线程的run方法中,定义当前子线程对应的任务执行方法;

设定当前子线程的执行任务对应的每个分任务执行成功或出现异常时,将当前子线程的countdownlatch值减一;

根据所述变量值和为当前子线程分配的任务量,计算任务执行进度。

进一步的,所述当子线程执行任务对应的每个分任务执行成功或错误时,将所述countdownlatch值减一还包括:

获取当前子线程的名称,并将当前子线程的名称存入数据库。

进一步的,所述当子线程执行任务对应的每个分任务执行成功或错误时,将所述countdownlatch值减一,并计算所述子线程的任务执行进度还包括:

创建变量,通过所述变量分别记录所述子线程中分任务执行成功的数量和出错的数量,根据所述子线程已执行的分配的任务量,计算所述子线程当前任务执行的成功率或出错率。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1