CN115904724A - 线程分配方法、装置、存储介质及计算机设备 - Google Patents
线程分配方法、装置、存储介质及计算机设备 Download PDFInfo
- Publication number
- CN115904724A CN115904724A CN202211625419.7A CN202211625419A CN115904724A CN 115904724 A CN115904724 A CN 115904724A CN 202211625419 A CN202211625419 A CN 202211625419A CN 115904724 A CN115904724 A CN 115904724A
- Authority
- CN
- China
- Prior art keywords
- thread
- threads
- subtask
- allocation
- allocated
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 48
- 238000012163 sequencing technique Methods 0.000 claims description 11
- 238000012544 monitoring process Methods 0.000 claims description 5
- 230000008569 process Effects 0.000 description 14
- 238000010586 diagram Methods 0.000 description 7
- 230000009471 action Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 3
- 230000001186 cumulative effect Effects 0.000 description 3
- 238000003825 pressing Methods 0.000 description 2
- 238000000586 desensitisation Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000007613 environmental effect Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本申请提供的线程分配方法、装置、存储介质及计算机设备,当确定待执行的目标任务以及待分配的线程总数后,由于该目标任务中包含多个并发执行的子任务,且子任务的数量不大于线程总数,因此,在系统初始运行时,本申请可以按照预设的第一分配策略来对每一子任务进行至少一次的线程分配操作,直到分配的线程数达到线程总数为止;进一步地,为了避免由于数据本身大小不均衡造成的分配误差,本申请可以预先设置轮数间隔,并在线程分配完毕后,监测目标任务的当前执行轮数,在当前执行轮数达到预设轮数间隔时,按照预设的第二分配策略对每一子任务重新进行至少一次的线程分配操作,直到分配的线程数达到所述线程总数为止,这样可以提高资源利用率。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种线程分配方法、装置、存储介质及计算机设备。
背景技术
与传统的多线程串行执行任务相比,多线程并行计算能够更加高效的处理给定的多个任务或工作。
例如,对数据进行脱敏的过程中,需要分成很多步骤,如下载数据、视频提取图片、脱敏、图片压成视频、上传等,每一步对资源的需求都不一样,可以使用的并发数也不一样。如果手动设置每一步的并发数,在实际执行任务的过程中,可能会因为每一步所依赖的环境资源变化,导致无法充分利用系统资源,降低了系统的吞吐量。
发明内容
本申请的目的旨在至少能解决上述的技术缺陷之一,特别是现有技术中如果手动设置每一步的并发数,在实际执行任务的过程中,可能会因为每一步所依赖的环境资源变化,导致无法充分利用系统资源,降低了系统的吞吐量的技术缺陷。
本申请提供了一种线程分配方法,所述方法包括:
确定待执行的目标任务及待分配的线程总数,所述目标任务包括多个并发执行的子任务,且所述目标任务中子任务的数量不大于所述线程总数;
在初始运行时,按照预设的第一分配策略对每一子任务进行至少一次的线程分配操作,直到分配的线程数达到所述线程总数为止;
在线程分配完毕后,监测所述目标任务的当前执行轮数,并在所述当前执行轮数达到预设轮数间隔时,按照预设的第二分配策略对每一子任务重新进行至少一次的线程分配操作,直到分配的线程数达到所述线程总数为止。
可选地,所述按照预设的第一分配策略对每一子任务进行至少一次的线程分配操作,直到分配的线程数达到所述线程总数为止,包括:
依据所述目标任务中子任务的数量为每一子任务分配单个线程,并在线程分配完毕后,统计每一子任务在单个线程下的第一执行时长;
计算各个子任务所分配的线程数与其对应的第一执行时长的商,并按照所有子任务的商的比例重新为每一子任务分配线程,直到分配的线程数达到所述线程总数为止。
可选地,所述按照预设的第二分配策略对每一子任务重新进行至少一次的线程分配操作,直到分配的线程数达到所述线程总数为止,包括:
获取各个子任务在上一轮数间隔下执行线程分配操作后分配的线程数,以及每一子任务在对应的线程数下的第二执行时长;
计算各个子任务所分配的线程数与其对应的第二执行时长的商,并按照所有子任务的商的比例重新为每一子任务分配线程,直到分配的线程数达到所述线程总数为止。
可选地,所述按照所有子任务的商的比例重新为每一子任务分配线程,直到分配的线程数达到所述线程总数为止,包括:
按照所有子任务的商的比例重新为每一子任务分配线程,并在线程分配完毕后,判断当前分配的线程数是否达到所述线程总数;
若达到,则停止线程分配操作;
若未达到,则按照各个子任务的商为各个子任务进行倒序排序,并按照排序顺序以及当前剩余的线程数从上到下依次为各个子任务分配单个线程;
若所述当前剩余的线程数分配完毕,则停止线程分配操作;
若所述当前剩余的线程数未分配完毕,则返回执行所述按照排序顺序以及当前剩余的线程数从上到下依次为各个子任务分配单个线程的步骤。
本申请还提供了一种线程分配装置,包括:
任务及线程确定模块,用于确定待执行的目标任务及待分配的线程总数,所述目标任务包括多个并发执行的子任务,且所述目标任务中子任务的数量不大于所述线程总数;
线程分配模块,用于在初始运行时,按照预设的第一分配策略对每一子任务进行至少一次的线程分配操作,直到分配的线程数达到所述线程总数为止;
线程再平衡模块,用于在线程分配完毕后,监测所述目标任务的当前执行轮数,并在所述当前执行轮数达到预设轮数间隔时,按照预设的第二分配策略对每一子任务重新进行至少一次的线程分配操作,直到分配的线程数达到所述线程总数为止。
可选地,所述线程分配模块,包括:
第一时长确定模块,用于依据所述目标任务中子任务的数量为每一子任务分配单个线程,并在线程分配完毕后,统计每一子任务在单个线程下的第一执行时长;
第一线程分配子模块,用于计算各个子任务所分配的线程数与其对应的第一执行时长的商,并按照所有子任务的商的比例重新为每一子任务分配线程,直到分配的线程数达到所述线程总数为止。
可选地,所述线程再平衡模块,包括:
第二时长确定模块,用于获取各个子任务在上一轮数间隔下执行线程分配操作后分配的线程数,以及每一子任务在对应的线程数下的第二执行时长;
第二线程分配子模块,用于计算各个子任务所分配的线程数与其对应的第二执行时长的商,并按照所有子任务的商的比例重新为每一子任务分配线程,直到分配的线程数达到所述线程总数为止。
可选地,所述第一线程分配子模块或所述第二线程分配子模块,包括:
重新分配模块,用于按照所有子任务的商的比例重新为每一子任务分配线程,并在线程分配完毕后,判断当前分配的线程数是否达到所述线程总数;
第一停止分配模块,用于若达到,则停止线程分配操作;
第一倒序分配模块,用于若未达到,则按照各个子任务的商为各个子任务进行倒序排序,并按照排序顺序以及当前剩余的线程数从上到下依次为各个子任务分配单个线程;
第二停止分配模块,用于若所述当前剩余的线程数分配完毕,则停止线程分配操作;
第二倒序分配模块,若所述当前剩余的线程数未分配完毕,则返回执行所述按照排序顺序以及当前剩余的线程数从上到下依次为各个子任务分配单个线程的步骤。
本申请还提供了一种存储介质,所述存储介质中存储有计算机可读指令,所述计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行如上述实施例中任一项所述线程分配方法的步骤。
本申请还提供了一种计算机设备,包括:一个或多个处理器,以及存储器;
所述存储器中存储有计算机可读指令,所述计算机可读指令被所述一个或多个处理器执行时,执行如上述实施例中任一项所述线程分配方法的步骤。
从以上技术方案可以看出,本申请实施例具有以下优点:
本申请提供的线程分配方法、装置、存储介质及计算机设备,当确定待执行的目标任务以及待分配的线程总数后,由于该目标任务中包含多个并发执行的子任务,且子任务的数量不大于线程总数,因此,在系统初始运行时,本申请可以按照预设的第一分配策略来对每一子任务进行至少一次的线程分配操作,直到分配的线程数达到线程总数为止,这样便可以在任务实际执行过程中根据每一子任务的具体执行情况对并发数进行实时调整,以提高资源利用率和系统整体的吞吐量;进一步地,为了避免由于数据本身大小不均衡造成的分配误差,本申请可以预先设置轮数间隔,并在线程分配完毕后,监测目标任务的当前执行轮数,在当前执行轮数达到预设轮数间隔时,按照预设的第二分配策略对每一子任务重新进行至少一次的线程分配操作,直到分配的线程数达到所述线程总数为止,这样不仅可以解决初始运行时数据量少,误差大的问题,还可以进一步提高资源利用率。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。
图1为本申请实施例提供的一种线程分配方法的流程示意图;
图2为本申请实施例提供的线程分配时的多轮分配流程示意图;
图3为本申请实施例提供的一种线程分配装置的结构示意图;
图4为本申请实施例提供的一种计算机设备的内部结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
与传统的多线程串行执行任务相比,多线程并行计算能够更加高效的处理给定的多个任务或工作。例如,对数据进行脱敏的过程中,需要分成很多步骤,如下载数据、视频提取图片、脱敏、图片压成视频、上传等,每一步对资源的需求都不一样,可以使用的并发数也不一样。如果手动设置每一步的并发数,在实际执行任务的过程中,可能会因为每一步所依赖的环境资源变化,导致无法充分利用系统资源,降低了系统的吞吐量。基于此,本申请提出如下技术方案,具体参见下文:
在一个实施例中,如图1所示,图1为本申请实施例提供的一种线程分配方法的流程示意图;本申请提供了一种线程分配方法,所述方法可以包括:
S110:确定待执行的目标任务及待分配的线程总数。
本步骤中,在并行计算给定的任务时,可以先确定待执行的目标任务以及待分配的线程总数,这样便可以依据该线程总数来对目标任务进行并行计算。
具体地,本申请中的目标任务包括多个并发执行的子任务,且子任务的数量不大于线程总数,这样既可以保证每一子任务都能够分配到对应的线程,又能够为需要更多线程处理的子任务分配更多的线程,从而有效提高资源利用率。
例如,当目标任务为数据脱敏任务时,本申请可以按照目标任务中子任务的数量来配置相应的线程数,也可以按照目标任务的预计处理时长或任务类型等来配置相应的线程数,只要配置的线程总数不小于目标任务的子任务数量即可,其他在此不作限制。
S120:在初始运行时,按照预设的第一分配策略对每一子任务进行至少一次的线程分配操作,直到分配的线程数达到线程总数为止。
本步骤中,通过S110确定待执行的目标任务以及待分配的线程总数后,本申请可以在系统初始运行时,按照预设的第一分配策略来对每一子任务进行至少一次的线程分配操作,直到分配的线程数达到线程总数为止。
可以理解的是,由于本申请中的线程总数不小于目标任务的子任务数量,因此,当本申请的线程总数与子任务的数量相同时,可以对每一子任务进行一次的线程分配操作,而当本申请的线程总数大于子任务的数量时,则可以对每一子任务进行一次以上的线程分配操作,在分配线程时,可以按照预设的第一分配策略来进行线程分配操作,并在累计分配的线程数达到线程总数时为止。
在一种具体的实现方式中,本申请可以先为每一个子任务分配相同数量的线程,若还有剩余的线程数,则可以接着根据每一子任务的任务执行时长来决定下一次分配线程时每一子任务所分配的线程数,这样在多次线程分配后,便可以为每一子任务分配与其匹配的线程数,进而有效提高资源利用率。
S130:在线程分配完毕后,监测目标任务的当前执行轮数,并在当前执行轮数达到预设轮数间隔时,按照预设的第二分配策略对每一子任务重新进行至少一次的线程分配操作,直到分配的线程数达到线程总数为止。
本步骤中,通过S120在系统初始运行时,按照预设的第一分配策略对每一子任务进行至少一次的线程分配操作,直到分配的线程数达到线程总数为止后,本申请还可以继续监测目标任务的当前执行轮数,并在当前执行轮数达到预设轮数间隔时,按照预设的第二分配策略对每一子任务重新进行至少一次的线程分配操作,直到累计分配的线程数达到线程总数为止。
需要说明的是,由于本申请在初始运行时对每一子任务的线程进行分配时,初始运行时的数据量较少,可能会导致初始运行时的线程分配误差较大。因此,本申请为了减少分配误差,可以每间隔一段时间进行线程再平衡操作,以此来避免数据量大小不同导致分配误差的情况发生。
具体地,本申请在初始运行时线程分配完毕后,可以继续监测目标任务的当前执行轮数,假设目标任务中每一个子任务都执行完为一轮,本申请可以预先设置相应的轮数间隔,如按照轮数的指数次方进行设置,或者按照幂次方进行设置,也可以按照其他方式进行设置,在此不作限制。当设置好轮数间隔后,便可以在当前执行轮数达到预设轮数间隔时,按照预设的第二分配策略对每一子任务重新进行至少一次的线程分配操作,直到分配的线程数达到线程总数为止。例如,本申请可以按照轮次的指数次方进行再分配,即第二,四,八轮,…再次分配线程。从而有效解决初始时数据量少、误差大的问题。
其中,本申请在按照第二分配策略对每一子任务重新进行至少一次的线程分配操作时,可以按照当前每一子任务所分配的线程数以及每一子任务的任务执行时长来决定下一次分配时每一子任务的线程数,若线程数分配完毕,则继续等待下一轮数间隔再重新分配线程,若线程数未分配完毕,则可以按照每一子任务的任务执行时长继续为各个子任务分配线程,直到累计分配的线程数达到线程总数为止。
上述实施例中,当确定待执行的目标任务以及待分配的线程总数后,由于该目标任务中包含多个并发执行的子任务,且子任务的数量不大于线程总数,因此,在系统初始运行时,本申请可以按照预设的第一分配策略来对每一子任务进行至少一次的线程分配操作,直到分配的线程数达到线程总数为止,这样便可以在任务实际执行过程中根据每一子任务的具体执行情况对并发数进行实时调整,以提高资源利用率和系统整体的吞吐量;进一步地,为了避免由于数据本身大小不均衡造成的分配误差,本申请可以预先设置轮数间隔,并在线程分配完毕后,监测目标任务的当前执行轮数,在当前执行轮数达到预设轮数间隔时,按照预设的第二分配策略对每一子任务重新进行至少一次的线程分配操作,直到分配的线程数达到所述线程总数为止,这样不仅可以解决初始运行时数据量少,误差大的问题,还可以进一步提高资源利用率。
在一个实施例中,S120中按照预设的第一分配策略对每一子任务进行至少一次的线程分配操作,直到分配的线程数达到所述线程总数为止,可以包括:
S121:依据所述目标任务中子任务的数量为每一子任务分配单个线程,并在线程分配完毕后,统计每一子任务在单个线程下的第一执行时长。
S122:计算各个子任务所分配的线程数与其对应的第一执行时长的商,并按照所有子任务的商的比例重新为每一子任务分配线程,直到分配的线程数达到所述线程总数为止。
本实施例中,在分配线程时,可以按照预设的第一分配策略来进行线程分配操作,并在累计分配的线程数达到线程总数时为止。
例如,本申请可以先为每一个子任务分配相同数量的线程,若还有剩余的线程数,则可以接着根据每一子任务的任务执行时长来决定下一次分配线程时每一子任务所分配的线程数,这样在多次线程分配后,便可以为每一子任务分配与其匹配的线程数,进而有效提高资源利用率。
在一种具体的实现方式中,本申请可以根据目标任务中子任务的数量来为每一子任务分配单个线程,以便系统通过单个线程并发执行每一子任务,接着,本申请可以统计每一子任务在单个线程下的第一执行时长,并计算各个子任务所分配的线程数与其对应的第一执行时长的商,这样便可以通过所有子任务的商的比例重新为每一子任务分配对应的线程数,直到分配的线程数达到线程总数为止。
例如,当本申请中目标任务的子任务数量为五个,分别为A,B,C,D,E,线程总数为10时,在初始运行时,本申请可以为每一子任务分配单个线程,并计算每一子任务的实际执行时长A(2s)->B(2s)->c(2s)->D(2s)->E(2s),接着,本申请可以按照每一子任务的线程数与实际执行时长之间的商的比例来分配线程,如A(1/2s)->B(1/2s)->c(1/2s)->D(1/2s)->E(1/2s),按比例分配并取整后为2:2:2:2:2,即为每一子任务分配两个线程,此时线程刚好分配完毕。
在一个实施例中,S130中按照预设的第二分配策略对每一子任务重新进行至少一次的线程分配操作,直到分配的线程数达到所述线程总数为止,可以包括:
S131:获取各个子任务在上一轮数间隔下执行线程分配操作后分配的线程数,以及每一子任务在对应的线程数下的第二执行时长。
S132:计算各个子任务所分配的线程数与其对应的第二执行时长的商,并按照所有子任务的商的比例重新为每一子任务分配线程,直到分配的线程数达到所述线程总数为止。
本实施例中,由于本申请在初始运行时对每一子任务的线程进行分配时,初始运行时的数据量较少,可能会导致初始运行时的线程分配误差较大。因此,本申请为了减少分配误差,可以每间隔一段时间进行线程再平衡操作,以此来避免数据量大小不同导致分配误差的情况发生。
具体地,本申请在初始运行时线程分配完毕后,可以继续监测目标任务的当前执行轮数,假设目标任务中每一个子任务都执行完为一轮,本申请可以预先设置相应的轮数间隔,并在当前执行轮数达到预设轮数间隔时,按照预设的第二分配策略对每一子任务重新进行至少一次的线程分配操作,直到分配的线程数达到线程总数为止。例如,本申请可以按照轮次的指数次方进行再分配,即第二,四,八轮,…再次分配线程,再次分配线程时,可以先获取各个子任务在上一轮数间隔下执行线程分配操作后分配的线程数以及每一子任务在对应的线程数下的第二执行时长,接着在计算各个子任务的线程数与其对应的第二执行时长之间的商,并按照所有子任务的商的比例重新为每一子任务分配线程,直到分配的线程数达到线程总数为止,从而有效解决初始时数据量少、误差大的问题。
举例来说,当本申请中目标任务的子任务数量为五个,分别为A,B,C,D,E,线程总数为10时,在初始运行时,本申请可以为每一子任务分配单个线程,并计算每一子任务的实际执行时长A(2s)->B(2s)->c(2s)->D(2s)->E(2s),接着,本申请可以按照每一子任务的线程数与实际执行时长之间的商的比例来分配线程,如A(1/2s)->B(1/2s)->c(1/2s)->D(1/2s)->E(1/2s),按比例分配并取整后为2:2:2:2:2,即为每一子任务分配两个线程,此时线程刚好分配完毕,本申请可以将本次线程分配过程作为首轮轮数间隔下的线程分配操作,当目标任务的当前执行轮数达到预设轮数间隔时,本申请可以获取上一轮数间隔下各个子任务在上一轮数间隔下执行线程分配操作后分配的线程数以及每一子任务在对应的线程数下的第二执行时长,如A(4s)->B(2s)->c(3s)->d(2s)->E(4s),所有子任务的商的比例为2/4:2/2:2/3:2/2:2/4=3:6:4:6:3,按照比例分配线程并取整为1:2:1:2:1,按照该比例分配后,还剩余3个线程,此时可以继续执行线程分配操作,直到累计分配的线程数达到线程总数为止。
在一个实施例中,如图2所示,图2为本申请实施例提供的线程分配时的多轮分配流程示意图;S122或S132中按照所有子任务的商的比例重新为每一子任务分配线程,直到分配的线程数达到所述线程总数为止,可以包括:
S1221:按照所有子任务的商的比例重新为每一子任务分配线程,并在线程分配完毕后,判断当前分配的线程数是否达到线程总数。
S1222:若达到,则停止线程分配操作。
S1223:若未达到,则按照各个子任务的商为各个子任务进行倒序排序,并按照排序顺序以及当前剩余的线程数从上到下依次为各个子任务分配单个线程。
S1224:若当前剩余的线程数分配完毕,则停止线程分配操作。
S1225:若当前剩余的线程数未分配完毕,则返回执行按照排序顺序以及当前剩余的线程数从上到下依次为各个子任务分配单个线程的步骤。
本实施例中,在按照所有子任务的商的比例重新为每一子任务分配线程后,本申请可以判断当前分配的线程数是否达到线程总数,若未达到,则可以按照各个子任务的商为各个子任务进行倒序排序,并按照倒序排序的排序顺序以及当前剩余的线程数从上到下依次为各个子任务分配单个线程,并在当前剩余的线程数分配完毕后,停止线程分配操作,若当前剩余的线程数未分配完毕,则可以继续按照排序顺序以及当前剩余的线程数从上到下依次为各个子任务分配单个线程,直到当前剩余的线程数分配完毕为止;若当前分配的线程数达到线程总数,则可以直接停止线程分配操作。
举例来说,初始运行,本申请,可以为每一子任务分配单个线程,计算每一子任务的实际执行时长,接着,本申请可以计算各个子任务的线程数与实际执行时长的商,即n1/t1,n2/t2,n3/t3,…,并按照各个子任务的商来计算所有商的比例,即n1/t1:n2/t2:n3/t3,…,然后按照该比例来分配每一子任务需要的线程数,由于线程只能为整数,因此需要进行多轮分配,在每一轮分配时,计算线程总数total_thread_num*ni/ti/(n1/t1+n2/t2+n3/t3+…)并取整(ni,ti分别为第i个子任务的线程数和实际执行时长),即可得到每一子任务对应的线程数,如果线程分配完,则退出,如果未分配完毕,则可以按照ni/ti的倒序依次分配1个线程,如果线程分配完,则退出,如果未分配完毕,则继续按照ni/ti的倒序分配线程,直到线程分配完毕。
在一种具体的实现方式中,当本申请中目标任务的子任务数量为五个,分别为A,B,C,D,E,线程总数为10时,在初始运行时,本申请可以为每一子任务分配单个线程,并计算每一子任务的实际执行时长A(2s)->B(2s)->c(2s)->D(2s)->E(2s),接着,本申请可以按照每一子任务的线程数与实际执行时长之间的商的比例来分配线程,如A(1/2s)->B(1/2s)->c(1/2s)->D(1/2s)->E(1/2s),按比例分配并取整后为2:2:2:2:2,即为每一子任务分配两个线程,此时线程刚好分配完毕,本申请可以将本次线程分配过程作为首轮轮数间隔下的线程分配操作,当目标任务的当前执行轮数达到预设轮数间隔时,本申请可以获取上一轮数间隔下各个子任务在上一轮数间隔下执行线程分配操作后分配的线程数以及每一子任务在对应的线程数下的第二执行时长,如A(4s)->B(2s)->c(3s)->d(2s)->E(4s),所有子任务的商的比例为2/4:2/2:2/3:2/2:2/4=3:6:4:6:3,按照比例分配线程并取整为1:2:1:2:1,按照该比例分配后,还剩余3个线程,此时可以按照所有子任务的商的比例的逆序为排序前三的子任务分别分配一个线程,则最终的线程数为1:3:2:3:1。
下面对本申请实施例提供的线程分配装置进行描述,下文描述的线程分配装置与上文描述的线程分配方法可相互对应参照。
在一个实施例中,如图3所示,图3为本申请实施例提供的一种线程分配装置的结构示意图;本申请还提供了一种线程分配装置,可以包括任务及线程确定模块210、线程分配模块220、线程再平衡模块230,具体包括如下:
任务及线程确定模块210,用于确定待执行的目标任务及待分配的线程总数,所述目标任务包括多个并发执行的子任务,且所述目标任务中子任务的数量不大于所述线程总数。
线程分配模块220,用于在初始运行时,按照预设的第一分配策略对每一子任务进行至少一次的线程分配操作,直到分配的线程数达到所述线程总数为止。
线程再平衡模块230,用于在线程分配完毕后,监测所述目标任务的当前执行轮数,并在所述当前执行轮数达到预设轮数间隔时,按照预设的第二分配策略对每一子任务重新进行至少一次的线程分配操作,直到分配的线程数达到所述线程总数为止。
上述实施例中,当确定待执行的目标任务以及待分配的线程总数后,由于该目标任务中包含多个并发执行的子任务,且子任务的数量不大于线程总数,因此,在系统初始运行时,本申请可以按照预设的第一分配策略来对每一子任务进行至少一次的线程分配操作,直到分配的线程数达到线程总数为止,这样便可以在任务实际执行过程中根据每一子任务的具体执行情况对并发数进行实时调整,以提高资源利用率和系统整体的吞吐量;进一步地,为了避免由于数据本身大小不均衡造成的分配误差,本申请可以预先设置轮数间隔,并在线程分配完毕后,监测目标任务的当前执行轮数,在当前执行轮数达到预设轮数间隔时,按照预设的第二分配策略对每一子任务重新进行至少一次的线程分配操作,直到分配的线程数达到所述线程总数为止,这样不仅可以解决初始运行时数据量少,误差大的问题,还可以进一步提高资源利用率。
在一个实施例中,所述线程分配模块220,包括:
第一时长确定模块,用于依据所述目标任务中子任务的数量为每一子任务分配单个线程,并在线程分配完毕后,统计每一子任务在单个线程下的第一执行时长;
第一线程分配子模块,用于计算各个子任务所分配的线程数与其对应的第一执行时长的商,并按照所有子任务的商的比例重新为每一子任务分配线程,直到分配的线程数达到所述线程总数为止。
在一个实施例中,所述线程再平衡模块230,包括:
第二时长确定模块,用于获取各个子任务在上一轮数间隔下执行线程分配操作后分配的线程数,以及每一子任务在对应的线程数下的第二执行时长;
第二线程分配子模块,用于计算各个子任务所分配的线程数与其对应的第二执行时长的商,并按照所有子任务的商的比例重新为每一子任务分配线程,直到分配的线程数达到所述线程总数为止。
在一个实施例中,所述第一线程分配子模块或所述第二线程分配子模块,包括:
重新分配模块,用于按照所有子任务的商的比例重新为每一子任务分配线程,并在线程分配完毕后,判断当前分配的线程数是否达到所述线程总数;
第一停止分配模块,用于若达到,则停止线程分配操作;
第一倒序分配模块,用于若未达到,则按照各个子任务的商为各个子任务进行倒序排序,并按照排序顺序以及当前剩余的线程数从上到下依次为各个子任务分配单个线程;
第二停止分配模块,用于若所述当前剩余的线程数分配完毕,则停止线程分配操作;
第二倒序分配模块,若所述当前剩余的线程数未分配完毕,则返回执行所述按照排序顺序以及当前剩余的线程数从上到下依次为各个子任务分配单个线程的步骤。
在一个实施例中,本申请还提供了一种存储介质,所述存储介质中存储有计算机可读指令,所述计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行如上述实施例中任一项所述线程分配方法的步骤。
在一个实施例中,本申请还提供了一种计算机设备,包括:一个或多个处理器,以及存储器。
所述存储器中存储有计算机可读指令,所述计算机可读指令被所述一个或多个处理器执行时,执行如上述实施例中任一项所述线程分配方法的步骤。
示意性地,如图4所示,图4为本申请实施例提供的一种计算机设备的内部结构示意图,该计算机设备300可以被提供为一服务器。参照图4,计算机设备300包括处理组件302,其进一步包括一个或多个处理器,以及由存储器301所代表的存储器资源,用于存储可由处理组件302的执行的指令,例如应用程序。存储器301中存储的应用程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理组件302被配置为执行指令,以执行上述任意实施例的线程分配方法。
计算机设备300还可以包括一个电源组件303被配置为执行计算机设备300的电源管理,一个有线或无线网络接口304被配置为将计算机设备300连接到网络,和一个输入输出(I/O)接口305。计算机设备300可以操作基于存储在存储器301的操作系统,例如WindowsServer TM、Mac OS XTM、Unix TM、Linux TM、Free BSDTM或类似。
本领域技术人员可以理解,图4中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间可以根据需要进行组合,且相同相似部分互相参见即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种线程分配方法,其特征在于,所述方法包括:
确定待执行的目标任务及待分配的线程总数,所述目标任务包括多个并发执行的子任务,且所述目标任务中子任务的数量不大于所述线程总数;
在初始运行时,按照预设的第一分配策略对每一子任务进行至少一次的线程分配操作,直到分配的线程数达到所述线程总数为止;
在线程分配完毕后,监测所述目标任务的当前执行轮数,并在所述当前执行轮数达到预设轮数间隔时,按照预设的第二分配策略对每一子任务重新进行至少一次的线程分配操作,直到分配的线程数达到所述线程总数为止。
2.根据权利要求1所述的线程分配方法,其特征在于,所述按照预设的第一分配策略对每一子任务进行至少一次的线程分配操作,直到分配的线程数达到所述线程总数为止,包括:
依据所述目标任务中子任务的数量为每一子任务分配单个线程,并在线程分配完毕后,统计每一子任务在单个线程下的第一执行时长;
计算各个子任务所分配的线程数与其对应的第一执行时长的商,并按照所有子任务的商的比例重新为每一子任务分配线程,直到分配的线程数达到所述线程总数为止。
3.根据权利要求1所述的线程分配方法,其特征在于,所述按照预设的第二分配策略对每一子任务重新进行至少一次的线程分配操作,直到分配的线程数达到所述线程总数为止,包括:
获取各个子任务在上一轮数间隔下执行线程分配操作后分配的线程数,以及每一子任务在对应的线程数下的第二执行时长;
计算各个子任务所分配的线程数与其对应的第二执行时长的商,并按照所有子任务的商的比例重新为每一子任务分配线程,直到分配的线程数达到所述线程总数为止。
4.根据权利要求2或3所述的线程分配方法,其特征在于,所述按照所有子任务的商的比例重新为每一子任务分配线程,直到分配的线程数达到所述线程总数为止,包括:
按照所有子任务的商的比例重新为每一子任务分配线程,并在线程分配完毕后,判断当前分配的线程数是否达到所述线程总数;
若达到,则停止线程分配操作;
若未达到,则按照各个子任务的商为各个子任务进行倒序排序,并按照排序顺序以及当前剩余的线程数从上到下依次为各个子任务分配单个线程;
若所述当前剩余的线程数分配完毕,则停止线程分配操作;
若所述当前剩余的线程数未分配完毕,则返回执行所述按照排序顺序以及当前剩余的线程数从上到下依次为各个子任务分配单个线程的步骤。
5.一种线程分配装置,其特征在于,包括:
任务及线程确定模块,用于确定待执行的目标任务及待分配的线程总数,所述目标任务包括多个并发执行的子任务,且所述目标任务中子任务的数量不大于所述线程总数;
线程分配模块,用于在初始运行时,按照预设的第一分配策略对每一子任务进行至少一次的线程分配操作,直到分配的线程数达到所述线程总数为止;
线程再平衡模块,用于在线程分配完毕后,监测所述目标任务的当前执行轮数,并在所述当前执行轮数达到预设轮数间隔时,按照预设的第二分配策略对每一子任务重新进行至少一次的线程分配操作,直到分配的线程数达到所述线程总数为止。
6.根据权利要求5所述的线程分配装置,其特征在于,所述线程分配模块,包括:
第一时长确定模块,用于依据所述目标任务中子任务的数量为每一子任务分配单个线程,并在线程分配完毕后,统计每一子任务在单个线程下的第一执行时长;
第一线程分配子模块,用于计算各个子任务所分配的线程数与其对应的第一执行时长的商,并按照所有子任务的商的比例重新为每一子任务分配线程,直到分配的线程数达到所述线程总数为止。
7.根据权利要求5所述的线程分配装置,其特征在于,所述线程再平衡模块,包括:
第二时长确定模块,用于获取各个子任务在上一轮数间隔下执行线程分配操作后分配的线程数,以及每一子任务在对应的线程数下的第二执行时长;
第二线程分配子模块,用于计算各个子任务所分配的线程数与其对应的第二执行时长的商,并按照所有子任务的商的比例重新为每一子任务分配线程,直到分配的线程数达到所述线程总数为止。
8.根据权利要求6或7所述的线程分配装置,其特征在于,所述第一线程分配子模块或所述第二线程分配子模块,包括:
重新分配模块,用于按照所有子任务的商的比例重新为每一子任务分配线程,并在线程分配完毕后,判断当前分配的线程数是否达到所述线程总数;
第一停止分配模块,用于若达到,则停止线程分配操作;
第一倒序分配模块,用于若未达到,则按照各个子任务的商为各个子任务进行倒序排序,并按照排序顺序以及当前剩余的线程数从上到下依次为各个子任务分配单个线程;
第二停止分配模块,用于若所述当前剩余的线程数分配完毕,则停止线程分配操作;
第二倒序分配模块,若所述当前剩余的线程数未分配完毕,则返回执行所述按照排序顺序以及当前剩余的线程数从上到下依次为各个子任务分配单个线程的步骤。
9.一种存储介质,其特征在于:所述存储介质中存储有计算机可读指令,所述计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行如权利要求1至4中任一项所述线程分配方法的步骤。
10.一种计算机设备,其特征在于,包括:一个或多个处理器,以及存储器;
所述存储器中存储有计算机可读指令,所述计算机可读指令被所述一个或多个处理器执行时,执行如权利要求1至4中任一项所述线程分配方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211625419.7A CN115904724A (zh) | 2022-12-16 | 2022-12-16 | 线程分配方法、装置、存储介质及计算机设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211625419.7A CN115904724A (zh) | 2022-12-16 | 2022-12-16 | 线程分配方法、装置、存储介质及计算机设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115904724A true CN115904724A (zh) | 2023-04-04 |
Family
ID=86483179
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211625419.7A Pending CN115904724A (zh) | 2022-12-16 | 2022-12-16 | 线程分配方法、装置、存储介质及计算机设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115904724A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117472593A (zh) * | 2023-12-27 | 2024-01-30 | 中诚华隆计算机技术有限公司 | 一种多线程间资源分配方法及系统 |
-
2022
- 2022-12-16 CN CN202211625419.7A patent/CN115904724A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117472593A (zh) * | 2023-12-27 | 2024-01-30 | 中诚华隆计算机技术有限公司 | 一种多线程间资源分配方法及系统 |
CN117472593B (zh) * | 2023-12-27 | 2024-03-22 | 中诚华隆计算机技术有限公司 | 一种多线程间资源分配方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9229783B2 (en) | Methods and apparatus for resource capacity evaluation in a system of virtual containers | |
US9092265B2 (en) | Long-term resource provisioning with cascading allocations | |
Downey | Predicting queue times on space-sharing parallel computers | |
US8881168B2 (en) | Scheduling a parallel job in a system of virtual containers | |
EP2176751B1 (en) | Scheduling by growing and shrinking resource allocation | |
US7206890B2 (en) | System and method for reducing accounting overhead during memory allocation | |
CN106095590B (zh) | 一种基于线程池的任务分配方法及装置 | |
US9374314B2 (en) | QoS aware balancing in data centers | |
Fan et al. | Harmonic semi-partitioned scheduling for fixed-priority real-time tasks on multi-core platform | |
CN111352736A (zh) | 大数据资源的调度方法、装置、服务器及存储介质 | |
CN110347602B (zh) | 多任务脚本执行方法及装置、电子设备及可读存储介质 | |
CN110543352B (zh) | 调度系统的任务分配方法及其相关的装置 | |
CN115904724A (zh) | 线程分配方法、装置、存储介质及计算机设备 | |
CN114579284A (zh) | 任务调度方法及装置 | |
Davis et al. | Quantifying the sub-optimality of uniprocessor fixed priority non-pre-emptive scheduling | |
EP3611620B1 (en) | Cost optimization in dynamic workload capping | |
CN114896029A (zh) | 电力系统仿真优化计算方法、装置、设备及可读存储介质 | |
CN114911579A (zh) | 电力系统仿真并行计算方法、装置、设备及可读存储介质 | |
CN115640113A (zh) | 多平面弹性调度方法 | |
CN113485838A (zh) | 服务器分配方法及装置、电子设备和计算机可读存储介质 | |
CN116962532A (zh) | 集群任务调度方法、装置、计算机设备及存储介质 | |
CN115098269A (zh) | 一种资源分配方法、装置、电子设备及存储介质 | |
GB2504737A (en) | Load balancing in SAP (RTM) system | |
Upadhye et al. | Cloud resource allocation as non-preemptive approach | |
KR102022972B1 (ko) | 이종 멀티 프로세싱 시스템 환경 기반 런타임 관리장치 및 방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |