任务处理方法及装置与流程

文档序号:13136476阅读:132来源:国知局
任务处理方法及装置与流程

本发明实施例涉及计算机技术领域,尤其涉及一种任务处理方法及装置。



背景技术:

在应用程序(软件)中,有很多耗时的业务逻辑,例如,获取服务器的数据、存储配置信息、定时上报日志信息等,为了保证应用程序的正常运行,可以通过intentservice类(服务组件)实现将耗时的业务逻辑。

在应用程序的运行过程中,当应用程序运行到预设节点时,应用程序为了实现预设功能,应用程序可以对对应业务逻辑进行实例化,以得到实例化的任务,并通过实例化的任务完成相应的功能。其中,每一个业务逻辑用于实现一种功能,实例化的任务可以实现业务逻辑所提供的功能,且实例化的任务还可以具有自定义的功能。在应用程序运行至不同的节点时,可以对同一业务逻辑进行不同实例化,以得到多个任务,该多个任务均可以实现业务逻辑所提供的功能,但是该多个任务可能会有自定义功能可能会有差异,其中,一种业务逻辑实例化得到的多个任务串行执行,不同业务逻辑实例化得到的多个任务可以并行执行。

在现有技术中,在一种业务逻辑被实例化得到任务之后,通过服务组件创建任务对应的线程,并通过线程执行该任务。然而,当实例化的任务较多时,需要创建多个线程,在线程个数较多时,可能会导致应用程序运行异常。



技术实现要素:

本发明实施例提供一种任务处理方法及装置,避免了应用程序由于并行运行的线程个数太多而出现的异常的问题。

第一方面,本发明实施例提供一种任务处理方法,包括:

获取所述应用程序生成的待处理任务、及所述待处理任务的类型;

根据所述待处理任务的类型,在队列集合中确定目标队列,所述队列集合中包括多个队列;

将所述待处理任务缓存至所述目标队列;

在确定所述目标队列中、所述待处理任务的前一个任务处理完成之后,通过线程池中的线程对所述待处理任务进行处理,所述线程池中的线程个数小于所述队列集合中的队列的个数。

在一种可能的实施方式中,所述在确定所述目标队列中、所述待处理任务的前一个任务处理完成之后,通过线程池中的线程对所述待处理任务进行处理,包括:

获取所述目标队列中、所述待处理任务的前一个任务对应的处理完成消息;

根据所述处理完成消息,通过所述线程池中的线程对所述待处理任务进行处理。

在另一种可能的实施方式中,所述根据所述处理完成消息,通过所述线程池中的线程对所述待处理任务进行处理,包括:

根据所述处理完成消息,将所述待处理任务存储至所述线程池对应的缓存队列;

在确定所述待处理任务位于所述缓存队列的队首、且所述线程池中存在空闲线程时,通过所述空闲线程对所述待处理任务进行处理。

在另一种可能的实施方式中,所述根据所述处理完成消息,将所述待处理任务存储至所述线程池对应的缓存队列之前,还包括:

在确定所述应用程序启动之后,创建所述缓存队列;

在确定所述队列集合中的队列中存在第一个任务时,将每一个队列中的第一个任务存储至所述缓存队列。

在另一种可能的实施方式中,根据所述处理完成消息,将所述待处理任务存储至所述线程池对应的缓存队列之后,还包括:

将所述待处理任务移出所述目标队列。

在另一种可能的实施方式中,通过所述空闲线程对所述待处理任务进行处理之后,还包括:

将所述待处理任务移出所述缓存队列。

第二方面,本发明实施例提供一种任务处理装置,包括获取模块、确定模块、存储模块和处理模块,其中,

所述获取模块用于,获取所述应用程序生成的待处理任务、及所述待处理任务的类型;

所述确定模块用于,根据所述待处理任务的类型,在队列集合中确定目标队列,所述队列集合中包括多个队列;

所述存储模块用于,将所述待处理任务缓存至所述目标队列;

所述处理模块用于,在确定所述目标队列中、所述待处理任务的前一个任务处理完成之后,通过线程池中的线程对所述待处理任务进行处理,所述线程池中的线程个数小于所述队列集合中的队列的个数。

在一种可能的实施方式中,所述处理模块包括获取单元和处理单元,其中,

所述获取单元用于,获取所述目标队列中、所述待处理任务的前一个任务对应的处理完成消息;

所述处理单元用于,根据所述处理完成消息,通过所述线程池中的线程对所述待处理任务进行处理。

在另一种可能的实施方式中,所述处理单元具体用于:

根据所述处理完成消息,将所述待处理任务存储至所述线程池对应的缓存队列;

在确定所述待处理任务位于所述缓存队列的队首、且所述线程池中存在空闲线程时,通过所述空闲线程对所述待处理任务进行处理。

在另一种可能的实施方式中,所述装置还包括创建模块,其中,

所述创建模块用于,在所述处理单元所述根据所述处理完成消息,将所述待处理任务存储至所述线程池对应的缓存队列之前,在确定所述应用程序启动之后,创建所述缓存队列;

所述存储模块还用于,在确定所述队列集合中的队列中存在第一个任务时,将每一个队列中的第一个任务存储至所述缓存队列。

在另一种可能的实施方式中,所述存储模块还用于:

在所述处理单元根据所述处理完成消息,将所述待处理任务存储至所述线程池对应的缓存队列之后,将所述待处理任务移出所述目标队列。

在另一种可能的实施方式中,所述存储模块还用于:

在所述处理单元通过所述空闲线程对所述待处理任务进行处理之后,将所述待处理任务移出所述缓存队列。

本发明实施例提供的任务处理方法及装置,在应用程序实例化得到待处理任务之后,重构服务组件获取待处理任务的类型,根据待处理任务的类型确定用于缓存待处理任务的目标队列,并将待处理任务缓存至目标队列。重构服务组件通过共享线程池中的线程对一个队列中的任务进行线程处理,对不同队列中的任务进行并行处理,直至重构服务组件确定目标队列中、待处理任务的前一个任务被处理完成之后,重构服务组件再通过线程池中的线程对待处理任务进行处理,这样,可以保证同一队列中的任务被串行处理,不同队列中的任务被并行处理,进一步的,由于线程池中的线程个数小于队列集合中的队列的个数,这样,在应用程序生成的任务的种类较多时,可以保证并行运行的线程个数可以在一定范围内,进而可以避免应用程序由于并行运行的线程个数太多而出现的异常的问题。

附图说明

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

图1为本发明实施例提供的任务处理方法的应用场景示意图;

图2为本发明实施例提供的任务处理方法的流程示意图;

图3为本发明实施例提供的对待处理任务进行处理方法的流程示意图;

图4为本发明实施例提供的队列结构示意图;

图5为本发明实施例提供的任务处理装置的结构示意图一;

图6为本发明实施例提供的任务处理装置的结构示意图二。

具体实施方式

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

图1为本发明实施例提供的任务处理方法的应用场景示意图。请参见图1,安装在终端设备中的应用程序中包括多个业务逻辑和重构服务组件,每一种业务逻辑用于实现一种功能,本申请中所示的业务逻辑均为较为耗时的业务逻辑,且本申请中所示的业务逻辑实例化得到的任务需要通过重构服务组件实现。在终端设备中的应用程序运行的过程中,应用程序对业务逻辑进行实例化,得到业务逻辑对应的任务,其中,一种业务逻辑可以被实例化得到多个任务,在得到实例化的任务之后,通过重构服务组件实现在后台运行任务。

具体的,在重构服务组件获取到需要在后台运行的任务之后,重构服务组件根据任务的类型,将任务放置对应的队列中,并控制线程池中的线程对各个队列中的任务进行处理,其中,线程池中的线程需要对一个队列中的任务串行处理,对不同队列中的任务并行处理。在本申请中,通过对重构服务组件的执行流程进行改进,使得重构服务组件可以对同一类型的任务串行处理,对不同类型的任务并行处理,且在重构服务组件通过线程池中的线程对任务进行处理,可以预先设置线程池中的线程个数,进而可以避免应用程序运行异常。

下面,通过具体实施例,对本申请所示的技术方案进行详细说明。需要说明的是,下面几个实施例可以相互结合,对于相同或相似的内容在不同的实施例中不再进行赘述。

图2为本发明实施例提供的任务处理方法的流程示意图。请参见图2,该方法可以包括:

s201、获取应用程序生成的待处理任务、及待处理任务的类型。

本发明实施例的执行主体可以为任务处理装置,任务处理装置可以为应用程序中的重构服务组件,例如,重构服务组件可以为batchintentservice,该重构服务组件可以为对现有的服务组件intentservice的改进。需要说明的是,在下文描述中,以任务处理装置为重构服务组件为例进行说明。可选的,该重构服务组件可以通过软件实现。

需要说明的是,本发明实施例中的重构服务组件对任意一个任务的处理过程相同,在本发明实施例中,以重构服务组件对任意的一个待处理任务的处理过程为例进行说明。

本发明实施例所示的应用程序可以为安装在手机、电脑等设备中的任意应用程序。在应用程序中包括多个业务逻辑,在应用程序运行的过程中,应用程序可以对业务逻辑进行调用以实现相应的功能,在应用程序调用业务逻辑时,对业务逻辑进行实例化,得到实例化的待处理任务,并调用重构服务组件对待处理任务进行处理,可选的,可以将待处理任务传递给重构服务组件,以使重构服务组件获取得到待处理任务。

在本发明实施例中,待处理任务的类型可以用待处理任务对应的业务逻辑表示,其中,业务逻辑可以包括“获取服务器的数据”、“存储配置信息”、“定时上报日志信息”等。同一业务逻辑实例化得到的多个待处理任务的类型相同,不同业务逻辑实例化得到的多个待处理任务的类型不同。

可选的,重构服务组件可以获取待处理任务对应的业务逻辑,根据待处理任务对应的业务逻辑,确定待处理任务的类型。

s202、根据待处理任务的类型,在队列集合中确定目标队列,队列集合中包括多个队列。

可选的,该队列集合中的队列可以为在应用程序启动之后,在终端设备的内存中创建的。队列集合中包括多个队列,每一个队列对应一种任务类型。

在重构服务组件获取得到待处理任务的类型之后,根据待处理任务的类型,在队列结合中确定待处理任务的类型对应的目标队列。

s203、将待处理任务缓存至目标队列。

在本发明实施例中,队列集合中的每一个队列均为先进先出队列,因此,将待处理任务缓存至目标队列的队尾。

s204、在确定目标队列中、待处理任务的前一个任务处理完成之后,通过线程池中的线程对待处理任务进行处理。

线程池中包括多个线程,线程池中的线程可以为在应用程序启动之后创建的,该多个线程可以对队列集合中每一个队列中的任务进行处理,可选的,线程池中的线程个数通常小于队列集合中队列的个数。其中,线程池中的线程需要对一个队列中的任务进行串行处理,即,针对一个队列,只有将该队列中的一个任务处理完成之后,才能对该队列中的下一个任务进行处理。线程池中的线程可以对不同队列中的任务进行并行处理,即,可以通过线程池中的不同线程同时对不同队列中的任务进行同时处理。

由于一个队列中的任务需要串行处理,因此,针对任意一个队列,在重构服务组件确定该队列中的一个任务处理完成之后,重构服务组件才会将该队列中的下一个待处理任务交由线程池中的线程进行处理。

相应的,在重构服务组件将待处理任务缓存至目标队列之后,在重构服务组件确定目标队列中、待处理任务的前一个任务处理完成之后,才通过线程池中的线程对待处理任务进行处理。

本发明实施例提供的任务处理方法,在应用程序实例化得到待处理任务之后,重构服务组件获取待处理任务的类型,根据待处理任务的类型确定用于缓存待处理任务的目标队列,并将待处理任务缓存至目标队列。重构服务组件通过共享线程池中的线程对一个队列中的任务进行线程处理,对不同队列中的任务进行并行处理,直至重构服务组件确定目标队列中、待处理任务的前一个任务被处理完成之后,重构服务组件再通过线程池中的线程对待处理任务进行处理,这样,可以保证同一队列中的任务被串行处理,不同队列中的任务被并行处理,进一步的,由于线程池中的线程个数小于队列集合中的队列的个数,这样,在应用程序生成的任务的种类较多时,可以保证并行运行的线程个数可以在一定范围内,进而可以避免应用程序由于并行运行的线程个数太多而出现的异常的问题。

在上述任意一个实施例的基础上,可选的,重构服务组件可以通过如下可行的实现方式通过线程池中的线程对待处理任务进行处理(图2所示实施例中的s204),具体的,请参见图3所示的实施例。

图3为本发明实施例提供的对待处理任务进行处理方法的流程示意图。请参见图3,该方法可以包括:

s301、获取目标队列中、待处理任务的前一个任务对应的处理完成消息。

在本发明实施例中,在线程对一个任务处理完成之后,生成该处理任务对应的处理完成消息,并将处理完成消息反馈至重构服务组件。

s302、根据处理完成消息,将待处理任务存储至线程池对应的缓存队列。

可选的,在确定应用程序启动之后,可以在安装应用程序的终端设备的内存中创建的缓存队列。在确定队列集合中的队列中存在第一个任务时,将每一个队列中的第一个任务存储至缓存队列。

可选的,队列中的第一个任务是指,在应用程序启动后的过程中第一个缓存至队列中的任务,每一个队列均有其对应的第一个任务。可选的,在应用程序运行的过程中,判断队列集合中的每一个队列中是否存在第一个任务,当确定队列中存在第一个任务时,将第一个任务存储至缓存队列,并在队列中删除第一个任务。

在重构服务组件获取得到目标队列中、待处理任务的前一个任务对应的处理完成消息之后,重构服务组件将待处理任务存储至线程池对应的缓存队列中。缓存队列为一个先进先出队列,因此,重构服务组件将待处理任务存储至缓存队列的队尾。

s303、将待处理任务移出目标队列。

s304、在确定待处理任务位于缓存队列的队首、且线程池中存在空闲线程时,通过空闲线程对待处理任务进行处理。

重构服务组件控制线程池中的线程按照顺序对缓存队列中的任务进行处理,可选的,在重构服务组件确定线程池中存在空闲线程时,则将缓存队列队首的任务交由空闲线程处理,同时,将交由空闲线程处理的任务移出缓存队列。

在重构服务组件确定待处理任务位于缓存队列的队首、且线程池中存在空闲线程时,则将待处理任务交给线程池中的空闲线程对待处理任务进行处理。

s305、将待处理任务移出缓存队列。

在将待处理任务交由线程池中的空闲线程处理之后,重构服务组件将待处理任务移出缓存队列。

在图3所示的实施例中,通过设置线程池对应的缓存队列,可以确保线程池中的线程对各个队列中的任务进行均匀的处理。

下面,结合图4所示的队列结构示意图,通过具体示例,对上述方法实施例所示的技术方案进行详细说明。图4为本发明实施例提供的队列结构示意图。

示例性的,假设应用程序中包括5种业务逻辑,分别记为业务逻辑1-业务逻辑5。再假设线程池中包括3个线程,分别记为线程1-线程3。

在应用程序在终端设备中启动之后,在终端设备的内存中创建每一个业务逻辑对应的队列,分别记为队列1-队列5,还在终端设备的内存中创建线程池对应的缓存队列,记为缓存队列1。

在应用程序的运行过程中,应用程序可以对业务逻辑1-业务逻辑5进行实例化,假设在应用程序启动之后,对业务逻辑1-业务逻辑5实例化得到多个任务,每个任务被存储在对应的队列中,假设每个队列中存储的任务如图4中的401所示。

请参见401,在初始时,队列1中包括任务11-任务13,队列2中包括任务21-任务22,队列3中包括任务31,队列5中包括任务51-任务53,此时,缓存队列中不包括任何任务。

假设队列1中的第一个任务为任务11,队列2中的第一个任务为任务21,队列3中的第一个任务为任务31,队列5中的第一个任务为任务51。在确定队列中的第一个任务之后,分别将每一个第一任务存储到缓存队列1中,并在相应的队列中删除第一个任务,此时,每个队列中存储的任务如图4中的402所示。

请参见402,队列1-队列5中的第一个任务分别为转移至缓存队列1中。

重构服务组件分别将缓存队列中的任务11-任务31交由给线程1-线程3处理,此时,每个队列中存储的任务、及每个线程当前处理的任务如图4中的403所示。

在线程1对任务11处理完成之后,生成任务11对应的处理完成消息1,重构服务组件获取到处理完成消息1之后,重构服务组件将队列1中队首的任务12存储至缓存队列1,并将队列1中的任务12删除,同时,由于任务51位于缓存队列1的队首、且线程池中存在空闲线程(线程1),则将任务51交由线程1处理,此时,每个队列中存储的任务、及每个线程当前处理的任务如图4中的404所示。

依次类推,直至所有队列1-队列5中的任务被处理完成。需要说明的是,在对队列1-队列5中的任务处理的过程中,队列1-队列5中还有可能增加新的任务,对于新的任务的处理过程与上述过程类似,此处不再进行赘述。

在上述过程中,若根据现有技术中的方法,最多需要创建5线程,且5个线程并行运行,而在本申请中,最多3个线程并行运行,避免了应用程序由于并行运行的线程个数太多而出现的异常的问题。

图5为本发明实施例提供的任务处理装置的结构示意图一。请参见图5,该装置可以包括获取模块11、确定模块12、存储模块13和处理模块14,其中,

所述获取模块11用于,获取所述应用程序生成的待处理任务、及所述待处理任务的类型;

所述确定模块12用于,根据所述待处理任务的类型,在队列集合中确定目标队列,所述队列集合中包括多个队列;

所述存储模块13用于,将所述待处理任务缓存至所述目标队列;

所述处理模块14用于,在确定所述目标队列中、所述待处理任务的前一个任务处理完成之后,通过线程池中的线程对所述待处理任务进行处理,所述线程池中的线程个数小于所述队列集合中的队列的个数。

本发明实施例提供的任务处理装置可以执行上述方法实施例所示的技术方案,其实现原理以及有益效果类似,此处不再进行赘述。

图6为本发明实施例提供的任务处理装置的结构示意图二。在图5所示实施例的基础上,请参见图6,所述处理模块14包括获取单元141和处理单元142,其中,

所述获取单元141用于,获取所述目标队列中、所述待处理任务的前一个任务对应的处理完成消息;

所述处理单元142用于,根据所述处理完成消息,通过所述线程池中的线程对所述待处理任务进行处理。

在一种可能的实施方式中,所述处理单元142具体用于:

根据所述处理完成消息,将所述待处理任务存储至所述线程池对应的缓存队列;

在确定所述待处理任务位于所述缓存队列的队首、且所述线程池中存在空闲线程时,通过所述空闲线程对所述待处理任务进行处理。

在另一种可能的实施方式中,所述装置还包括创建模块15,其中,

所述创建模块15用于,在所述处理单元142所述根据所述处理完成消息,将所述待处理任务存储至所述线程池对应的缓存队列之前,在确定所述应用程序启动之后,创建所述缓存队列;

所述存储模块13还用于,在确定所述队列集合中的队列中存在第一个任务时,将每一个队列中的第一个任务存储至所述缓存队列。

在另一种可能的实施方式中,所述存储模块13还用于:

在所述处理单元142根据所述处理完成消息,将所述待处理任务存储至所述线程池对应的缓存队列之后,将所述待处理任务移出所述目标队列。

在另一种可能的实施方式中,所述存储模块13还用于:

在所述处理单元142通过所述空闲线程对所述待处理任务进行处理之后,将所述待处理任务移出所述缓存队列。

本发明实施例提供的任务处理装置可以执行上述方法实施例所示的技术方案,其实现原理以及有益效果类似,此处不再进行赘述。

本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。

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

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