CN116521351B - 多线程任务调度方法、装置、存储介质及处理器 - Google Patents
多线程任务调度方法、装置、存储介质及处理器 Download PDFInfo
- Publication number
- CN116521351B CN116521351B CN202310800207.6A CN202310800207A CN116521351B CN 116521351 B CN116521351 B CN 116521351B CN 202310800207 A CN202310800207 A CN 202310800207A CN 116521351 B CN116521351 B CN 116521351B
- Authority
- CN
- China
- Prior art keywords
- execution time
- scheduling
- total execution
- task
- thread
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 87
- 238000003860 storage Methods 0.000 title claims abstract description 20
- 238000004364 calculation method Methods 0.000 claims description 7
- 230000008569 process Effects 0.000 description 22
- 238000004590 computer program Methods 0.000 description 16
- 238000010586 diagram Methods 0.000 description 11
- 230000007774 longterm Effects 0.000 description 10
- 238000009826 distribution Methods 0.000 description 8
- 230000006870 function Effects 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 4
- 238000003491 array Methods 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000008094 contradictory effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- 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
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请实施例提供一种多线程任务调度方法、装置、存储介质及处理器,属于计算机技术领域。方法包括:从调度线程中随机获取第一调度线程;从所述第一调度线程前后相邻的调度线程中获取预设数量的第二调度线程;比较第二调度线程各自的当前总执行时间和对应的前次任务分配时的前次总执行时间;若所有第二调度线程各自的当前总执行时间与对应的前次总执行时间相同,则确定第一调度线程为任务分配的目标调度线程;若确定存在当前总执行时间与对应的前次总执行时间不同的第二调度线程,则将确定的第二调度线程的当前总执行时间与第一调度线程的当前总执行时间进行比较,确定当前总执行时间最短的调度线程为任务分配的目标调度线程。
Description
技术领域
本申请涉及计算机技术领域,具体涉及一种多线程任务调度方法、一种多线程任务调度装置、一种机器可读存储介质及一种处理器。
背景技术
现代计算机一般采用多核CPU架构,允许多个线程并行执行。其中一个常见的问题是:将一些任务分配到指定的多个线程中执行,如何使每个线程执行任务的总时间尽可能接近。多个任务中,每个任务的执行时间不一定相等,且每个任务的执行时间在任务执行前是未知的。
业界现有的解决此问题的方法是所谓工作窃取(work-stealing)算法,其核心思想是:当一个线程执行完分配到的任务后,可以从其他线程窃取任务。该算法整体复杂性高,不容易实现,且在窃取任务的过程中涉及多线程竞争,很难实现高性能的窃取方案,另一方面,在实际应用过程中可能出现多个线程相互窃取任务的情况,影响性能。
发明内容
本申请实施例的目的是提供一种多线程任务调度方法、装置、存储介质及处理器,该方法在进行任务调度时,随机获取第一调度线程,然后再获取与第一调度线程相邻的第二调度线程,根据第一调度线程和第二调度线程的当前总执行时间和前次任务分配时的前次总执行时间确定目标调度线程,确定的目标调度线程随机性高,在长期的执行过程中,各线程的执行时间会趋向于平衡,在随机分配的基础上,结合当前总执行时间和前次总执行时间进行考量,更能够平衡各个调度线程的总执行时间,且该方法简单易实现,分配好的任务不需要再通过工作窃取进行平衡。
为了实现上述目的,本申请第一方面提供一种多线程任务调度方法,所述方法包括:
从调度线程中随机获取第一调度线程;
从所述第一调度线程前后相邻的调度线程中获取预设数量的第二调度线程;
比较第二调度线程各自的当前总执行时间和对应的前次任务分配时的前次总执行时间;
若所有第二调度线程各自的当前总执行时间与对应的前次总执行时间相同,则确定第一调度线程为任务分配的目标调度线程;
若确定存在当前总执行时间与对应的前次总执行时间不同的第二调度线程,则将确定的第二调度线程的当前总执行时间与第一调度线程的当前总执行时间进行比较,确定当前总执行时间最短的调度线程为任务分配的目标调度线程。
根据上述技术手段,确定的目标调度线程随机性高,在长期的执行过程中,各线程的执行时间会趋向于平衡,在随机分配的基础上,结合当前总执行时间和前次总执行时间进行考量,更能够平衡各个调度线程的总执行时间,且该方法简单易实现,分配好的任务不需要再通过工作窃取进行平衡。通过比较当前总执行时间与对应的前次总执行时间是否相同来确定第二调度线程是否更新当前总执行时间,相同,则没有更新当前总执行时间,若两次任务分配之间并没有更新过当前总执行时间,可以推断当前线程有任务在执行,且未执行完成,在这种情况下,将任务分配给随机确定的第一调度线程,以使任务分配具有随机性,在长期执行过程中趋向于平衡;若不相同,则确定有更新当前总执行时间,因此将任务分配给当前总执行时间最短的调度线程,这样可以避免调度线程在更新当前执行时间前,大量任务在短时间内分配到该调度线程的可能性,在随机分配的基础上,增加策略判断,加速各调度线程执行时间趋于平衡。
在本申请实施例中,所述方法还包括:
分别为各任务产生线程设置一个前次总执行时间数组,所述前次总执行时间数组中记录了各调度线程在对应任务产生线程前次任务分配时的前次总执行时间;
比较第二调度线程各自的当前总执行时间和对应的前次任务分配时的前次总执行时间,包括:
比较第二调度线程各自的当前总执行时间和任务产生线程记录的前次任务分配时的前次总执行时间。
通过上述技术手段,为每一个任务产生线程分别设置一个前次总执行时间数组,在调用或者更新前次总执行时间时,可以避免多线程竞争,提升性能。
在本申请实施例中,所述方法还包括:
在确定当前总执行时间与前次总执行时间不相同的情况下,使用当前总执行时间的值更新前次总执行时间的值。
通过上述技术手段,可以实时更新第二总执行时间,保障下次任务分配过程中分配策略执行的准确性。
在本申请实施例中,所述方法还包括:
在首次分配任务时,将任务随机分配到所有调度线程。
通过上述技术手段,在分配任务之初,各个调度线程的当前总执行时间和前次总执行时间均为0,通过分配策略计算每次会分配的目标调度线程也是最开始随机确定的第一调度线程,因此,为了节约分配的计算量,可以直接采用随机分配的方式,均衡各个调度线程分配到的任务量。在所有调度线程均执行完任务,并闲置一段时间后,再次分配任务时,各个线程的当前总执行任务时间已经存在差异,此时可以根据前述的方法随机选择第一调度线程,再根据当前总执行时间和前次总执行时间确定目标调度线程。但是,由于所有调度线程在分配任务前已经闲置,不会存在任务堆积的情况,也可以选择直接将任务随机分配到所有调度线程,分配一定数量后,再按照策略进行计算分配。
在本申请实施例中,所述方法还包括:
各调度线程在执行任务时,统计对应的任务消耗时间;
根据任务消耗时间和对应调度线程的当前总执行时间计算执行完对应任务后的最新总执行时间;
根据最新总执行时间的值更新对应调度线程的当前总执行时间的值。
通过上述技术手段可以实现第一总执行时间及时更新,以使后续任务分配更均衡。
本申请第二方面提供一种多线程任务调度装置,所述装置包括:
第一调度线程获取模块,用于从调度线程中随机获取第一调度线程;
第二调度线程获取模块,用于从所述第一调度线程前后相邻的调度线程中获取预设数量的第二调度线程;
目标调度线程获取模块,用于比较第二调度线程各自的当前总执行时间和对应的前次任务分配时的前次总执行时间;若所有第二调度线程各自的当前总执行时间与对应的前次总执行时间相同,则确定第一调度线程为任务分配的目标调度线程;若确定存在当前总执行时间与对应的前次总执行时间不同的第二调度线程,则将确定的第二调度线程的当前总执行时间与第一调度线程的当前总执行时间进行比较,确定当前总执行时间最短的调度线程为任务分配的目标调度线程。
通过上述技术手段,多线程任务调度装置可以在进行任务调度时,随机获取第一调度线程,然后再获取与第一调度线程相邻的第二调度线程,根据第一调度线程和第二调度线程的当前总执行时间和前次任务分配时的前次总执行时间确定目标调度线程,确定的目标调度线程随机性高,在长期的执行过程中,各线程的执行时间会趋向于平衡,在随机分配的基础上,结合当前总执行时间和前次总执行时间进行考量,更能够平衡各个调度线程的总执行时间,且该方法简单易实现,分配好的任务不需要再通过工作窃取进行平衡。
在本申请实施例中,所述装置还包括:
前次总执行时间更新模块,用于在确定当前总执行时间与前次总执行时间不相同的情况下,使用当前总执行时间的值更新前次总执行时间的值。
通过上述技术手段,前次总执行时间更新模块可以实时更新前次总执行时间,保障下次任务分配过程中分配策略执行的准确性。
在本申请实施例中,所述装置还包括:
任务执行时间统计模块,用于在执行任务时,统计对应的任务消耗时间;
最新总执行时间计算模块,用于根据任务消耗时间和对应调度线程的当前总执行时间计算执行完对应任务后的最新总执行时间;
当前总执行时间更新模块,用于根据最新总执行时间的值更新对应调度线程的当前总执行时间的值。
通过上述技术手段,可以实现当前总执行时间及时更新,以使后续任务分配更均衡。
本申请第三方面提供一种处理器,被配置成执行所述的多线程任务调度方法。
本申请第四方面提供一种机器可读存储介质,该机器可读存储介质上存储有指令,该指令在被处理器执行时使得所述处理器被配置成执行所述的多线程任务调度方法。
本申请第五方面提供一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现所述的多线程任务调度方法。
通过上述技术方案,提供的多线程任务调度方法在进行任务调度时,随机获取第一调度线程,然后再获取与第一调度线程相邻的第二调度线程,根据第一调度线程和第二调度线程的当前总执行时间和前次任务分配时的前次总执行时间确定目标调度线程,确定的目标调度线程随机性高,在长期的执行过程中,各线程的执行时间会趋向于平衡;同时,在随机分配的基础上,结合当前总执行时间和前次总执行时间进行考量,更能够平衡各个调度线程的总执行时间,且该方法简单易实现,分配好的任务不需要再通过工作窃取进行平衡。
使用上述方法的调度线程不会从其他线程窃取任务,避免了多线程竞争,既提升了性能,又容易实现。
本申请实施例的其它特征和优点将在随后的具体实施方式部分予以详细说明。
附图说明
附图是用来提供对本申请实施例的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本申请实施例,但并不构成对本申请实施例的限制。在附图中:
图1示意性示出了根据本申请实施例一的多线程任务调度方法的流程示意图;
图2示意性示出了根据本申请实施例一的多线程任务调度方法应用流程图;
图3示意性示出了根据本申请实施例的多线程任务调度方法汇总更新第一总执行时间流程图;
图4示意性示出了根据本申请实施例二的多线程任务调度方法的流程示意图;
图5示意性示出了根据本申请实施例二的多线程任务调度方法应用流程图;
图6示意性示出了根据本申请实施例的多线程任务调度装置框图;
图7示意性示出了根据本申请实施例的计算机设备的内部结构图。
附图标记说明
图中,A01-处理器,A02-网络接口,A03-内存储器,A04-非易失性存储介质,B01-操作***,B02-计算机程序。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,应当理解的是,此处所描述的具体实施方式仅用于说明和解释本申请实施例,并不用于限制本申请实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
需要说明,若本申请实施例中有涉及方向性指示(诸如上、下、左、右、前、后……),则该方向性指示仅用于解释在某一特定姿态(如附图所示)下各部件之间的相对位置关系、运动情况等,如果该特定姿态发生改变时,则该方向性指示也相应地随之改变。
另外,若本申请实施例中有涉及“第一”、“第二”等的描述,则该“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本申请要求的保护范围之内。
本申请提供的多线程任务调度方法,可以应用在支持多线程业务的终端或者服务器中,实现对终端或服务器上的任务的调度分配。其中,终端可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备,服务器可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
实施例一
图1示意性示出了根据本申请实施例一的多线程任务调度方法的流程示意图。如图1所示,在本申请一实施例中,提供了一种多线程任务调度方法,本实施例主要以该方法应用于服务器来举例说明,包括以下步骤:
步骤101:从调度线程中随机获取第一调度线程;
步骤102:从所述第一调度线程前后相邻的调度线程中获取预设数量的第二调度线程;
步骤103:比较第二调度线程各自的当前总执行时间和对应的前次任务分配时的前次总执行时间;
若所有第二调度线程各自的当前总执行时间与对应的前次总执行时间相同,则确定第一调度线程为任务分配的目标调度线程;
若确定存在当前总执行时间与对应的前次总执行时间不同的第二调度线程,则将确定的第二调度线程的当前总执行时间与第一调度线程的当前总执行时间进行比较,确定当前总执行时间最短的调度线程为任务分配的目标调度线程。
为了能够更好的确定目标调度线程,本方法定义了不同的数组来记录当前总执行时间和前次总执行时间,将调度线程按照序号标记为1,2,......,n。也可以从0开始,也可以采用其他标记方式,对本申请无影响。各线程的当前总执行时间分别记为t1,t2,......,tn,并将这些当前总执行时间的初始值设置为0。在本申请实施例中,记录一个各调度线程的前次任务分配时的前次总执行时间数组lt,记为:lt[1],lt[2],......,lt[n],并将这些前次总执行时间的初始值设置为0。
在本申请实施例中,如图2所示,第二调度线程为1个,且是第一调度线程序号后面的调度线程。当任务产生线程产生任务时,首先随机产生一个第一调度线程,假定为调度线程r,调度线程r的下一个调度线程为调度线程k,k=r+1(r ≠ n),或k=1(r = n)。然后获取前次总执行时间数组lt中的lt[k]以及调度线程k和调度线程r的当前总执行时间:tk,tr。
比较lt[k]和tk,若lt[k]= tk,说明调度线程k的执行时间未更新,直接将该任务分配给调度线程r;
若lt[k] ≠ tk,比较tr与tk,若tr ≤ tk,将任务分配给调度线程r,否则分配给调度线程k(即调度线程k执行时间较小时,则将任务分配给k,此策略打破了完全随机分配的规则,使各线程执行时间趋于平衡)。
根据上述技术手段,通过比较当前总执行时间与对应的前次总执行时间是否相同来确定第二调度线程是否更新当前总执行时间,相同,则没有更新当前总执行时间,若两次任务分配之间并没有更新过当前总执行时间,可以推断当前线程有任务在执行,且未执行完成,在这种情况下,将任务分配给随机确定的第一调度线程,以使任务分配具有随机性,在长期执行过程中趋向于平衡;若不相同,则有更新当前总执行时间,因此将任务分配给当前总执行时间最短的调度线程,这样可以避免调度线程在更新当前执行时间前,大量任务在短时间内分配到该调度线程的可能性,在随机分配的基础上,增加策略判断,加速各调度线程执行时间趋于平衡。
根据上述技术手段,确定的目标调度线程随机性高,在长期的执行过程中,各线程的执行时间会趋向于平衡,在随机分配的基础上,结合当前总执行时间和前次总执行时间进行考量,更能够平衡各个调度线程的总执行时间,且该方法简单易实现,分配好的任务不需要再通过工作窃取进行平衡。
在本申请实施例中,所述方法还包括:
在确定当前总执行时间与前次总执行时间不相同的情况下,使用当前总执行时间的值更新前次总执行时间的值。即:若lt[k] ≠ tk,将lt[k]更新为tk。
通过上述技术手段,可以实时更新前次总执行时间,保障下次任务分配过程中分配策略执行的准确性。
在本申请实施例中,所述方法还包括:
在首次分配任务时,将任务随机分配到所有调度线程。通过上述技术手段,在分配任务之初,各个调度线程的当前总执行时间和前次总执行时间均为0,通过分配策略计算每次会分配的目标调度线程为也是最开始随机确定的第一调度线程,因此,为了节约分配的计算量,可以直接采用随机分配的方式,均衡各个调度线程分配到的任务量。在所有调度线程均执行完任务,并闲置一段时间后,再次分配任务时,各个线程的当前总执行任务时间已经存在差异,此时可以根据前述的方法随机选择第一调度线程,再根据当前总执行时间和前次总执行时间确定目标调度线程。但是,由于所有调度线程在分配任务前已经闲置,不会存在任务堆积的情况,也可以选择直接将任务随机分配到所有调度线程,分配一定数量后,再按照策略进行计算分配。
在本申请实施例中,如图3所示,所述方法还包括:
各调度线程在执行任务时,统计对应的任务消耗时间;
根据任务消耗时间和对应调度线程的当前总执行时间计算执行完对应任务后的最新总执行时间;
根据最新总执行时间的值更新对应调度线程的当前总执行时间的值。
假定调度线程m在执行任务,(1≤m≤n),调度线程m的当前总执行时间为tm,则在执行任务时,统计消耗的时间dt,任务执行完成后,计算tm+dt,并将tm的值更新为tm+dt的值。由于tm的值可能被多个线程访问,因此在本申请实施例中,采用原子操作实现tm+dt计算及tm更新。
通过上述技术手段可以实现当前总执行时间及时更新,以使后续任务分配更均衡。
实施例二
图4示意性示出了根据本申请实施例二的多线程任务调度方法的流程示意图。如图4所示,在本申请一实施例中,提供了一种多线程任务调度方法,本实施例主要以该方法应用于服务器来举例说明,包括以下步骤:
步骤201:从调度线程中随机获取第一调度线程;
步骤202:从所述第一调度线程前后相邻的调度线程中获取预设数量的第二调度线程;
步骤203:比较第二调度线程各自的当前总执行时间和对应的任务产生线程记录的前次任务分配时的前次总执行时间;
若所有第二调度线程各自的当前总执行时间与对应的前次总执行时间相同,则确定第一调度线程为任务分配的目标调度线程;
若确定存在当前总执行时间与对应的前次总执行时间不同的第二调度线程,则将确定的第二调度线程的当前总执行时间与第一调度线程的当前总执行时间进行比较,确定当前总执行时间最短的调度线程为任务分配的目标调度线程。
本方法定义了不同的数组来记录当前总执行时间和前次总执行时间,将调度线程按照序号标记为1,2,......,n。也可以从0开始,也可以采用其他标记方式,对本申请无影响。各线程的当前总执行时间分别记为t1,t2,......,tn,并将这些当前总执行时间的初始值设置为0。在本申请实施例中,每个任务产生线程记录了一个各调度线程的前次任务分配时的前次总执行时间数组lt,任务产生线程记为1,2,......,s,则标号为1的任务产生线程所记录的前次总执行时间数组lt记为:lt1[1],lt1[2],......,lt1[n],标号为2的任务产生线程所记录的前次总执行时间数组lt记为:lt2[1],lt2[2],......,lt2[n],依次类推,并将这些前次总执行时间的初始值设置为0。在本申请实施例中,任务产生线程可以是调度线程也可以是其他线程。每一个任务产生线程各有一个前次总执行时间数据,可以采用thread local技术实现。
在本申请实施例中,如图5所示,第二调度线程为2个,且是第一调度线程序号前后各一个。当任务产生线程s产生任务时,首先随机产生一个第一调度线程,假定为调度线程r,调度线程r的下一个调度线程为调度线程k,k=r+1(r ≠ n),或k=1(r = n),调度线程r的前一个调度线程为调度线程l,l=r-1(r ≠ n),或l=n(r = 1)。然后获取任务产生线程所记录的前次总执行时间数组lt中的lts[k]、lts[l]以及调度线程k、调度线程l和调度线程r的当前总执行时间:tk,tl,tr。
比较lts[k]和tk,以及lts[l]和tl,若lts[k]= tk且lts[l]=tl,说明调度线程k和调度线程l的执行时间未更新,直接将该任务分配给调度线程r;
若lts[k] ≠ tk且lts[l]=tl,比较tr与tk,若tr ≤ tk,将任务分配给调度线程r,否则分配给调度线程k(即调度线程k执行时间较小时,则将任务分配给k,此策略打破了完全随机分配的规则,使各线程执行时间趋于平衡);
若lts[k] = tk且lts[l]≠tl,比较tr与tl,若tr ≤ tl,将任务分配给调度线程r,否则分配给调度线程l;
若lts[k] ≠ tk且lts[l]≠tl,比较tr、tk与tl,从中确定最小值,将任务分配给最小值对应的调度线程。
根据上述技术手段,通过比较当前总执行时间与对应的前次总执行时间是否相同来确定第二调度线程是否更新当前总执行时间,相同,则没有更新当前总执行时间,若两次任务分配之间并没有更新过当前总执行时间,可以推断当前线程有任务在执行,且未执行完成,在这种情况下,将任务分配给随机确定的第一调度线程,以使任务分配具有随机性,在长期执行过程中趋向于平衡;若不相同,则有更新当前总执行时间,因此将任务分配给当前总执行时间最短的调度线程,这样可以避免调度线程在更新当前执行时间前,大量任务在短时间内分配到该调度线程的可能性,在随机分配的基础上,增加策略判断,加速各调度线程执行时间趋于平衡。
根据上述技术手段,确定的目标调度线程随机性高,在长期的执行过程中,各线程的执行时间会趋向于平衡,在随机分配的基础上,结合当前总执行时间和前次总执行时间进行考量,更能够平衡各个调度线程的总执行时间,且该方法简单易实现,分配好的任务不需要再通过工作窃取进行平衡。
在本申请实施例中,所述方法还包括:
在确定当前总执行时间与前次总执行时间不相同的情况下,使用当前总执行时间的值更新前次总执行时间的值。即:若lts[k] ≠ tk,将lts[k]更新为tk。
通过上述技术手段,可以实时更新前次总执行时间,保障下次任务分配过程中分配策略执行的准确性。
在本申请实施例中,所述方法还包括:
在首次分配任务时,将任务随机分配到所有调度线程。
通过上述技术手段,在分配任务之初,各个调度线程的当前总执行时间和前次总执行时间均为0,通过分配策略计算每次会分配的目标调度线程为也是最开始随机确定的第一调度线程,因此,为了节约分配的计算量,可以直接采用随机分配的方式,均衡各个调度线程分配到的任务量。在所有调度线程均执行完任务,并闲置一段时间后,再次分配任务时,各个线程的当前总执行任务时间已经存在差异,此时可以根据前述的方法随机选择第一调度线程,再根据当前总执行时间和前次总执行时间确定目标调度线程。但是,由于所有调度线程在分配任务前已经闲置,不会存在任务堆积的情况,也可以选择直接将任务随机分配到所有调度线程,分配一定数量后,再按照策略进行计算分配。
在本申请实施例中,所述方法还包括:
各调度线程在执行任务时,统计对应的任务消耗时间;
根据任务消耗时间和对应调度线程的当前总执行时间计算执行完对应任务后的最新总执行时间;
根据最新总执行时间的值更新对应调度线程的当前总执行时间的值。
假定调度线程m在执行任务,(1≤m≤n),调度线程m的当前总执行时间为tm,则在执行任务时,统计消耗的时间dt,任务执行完成后,计算tm+dt,并将tm的值更新为tm+dt的值。由于tm的值可能被多个线程访问,因此在本申请实施例中,采用原子操作实现tm+dt计算及tm更新。
通过上述技术手段可以实现当前总执行时间及时更新,以使后续任务分配更均衡。
上述实施例一和实施例二仅提供了确定第二调度线程的两种方式,在实际使用过程中,可以根据需要获取1个、2个、4个等数量不等的第二调度线程,第二调度线程数量越少,任务调度效果越好。
本申请第二方面提供一种多线程任务调度装置,如图6所示,所述装置包括:
第一调度线程获取模块,用于从调度线程中随机获取第一调度线程;
第二调度线程获取模块,用于从所述第一调度线程前后相邻的调度线程中获取预设数量的第二调度线程;
目标调度线程获取模块,用于比较第二调度线程各自的当前总执行时间和对应的前次任务分配时的前次总执行时间;若所有第二调度线程各自的当前总执行时间与对应的前次总执行时间相同,则确定第一调度线程为任务分配的目标调度线程;若确定存在当前总执行时间与对应的前次总执行时间不同的第二调度线程,则将确定的第二调度线程的当前总执行时间与第一调度线程的当前总执行时间进行比较,确定当前总执行时间最短的调度线程为任务分配的目标调度线程。
通过上述技术手段,多线程任务调度装置可以在进行任务调度时,随机获取第一调度线程,然后再获取与第一调度线程相邻的第二调度线程,根据第一调度线程和第二调度线程的当前总执行时间和前次任务分配时的前次总执行时间确定目标调度线程,确定的目标调度线程随机性高,在长期的执行过程中,各线程的执行时间会趋向于平衡,在随机分配的基础上,结合当前总执行时间和前次总执行时间进行考量,更能够平衡各个调度线程的总执行时间,且该方法简单易实现,分配好的任务不需要再通过工作窃取进行平衡。
在本申请实施例中,所述装置还包括:
前次总执行时间更新模块,用于在确定当前总执行时间与前次总执行时间不相同的情况下,使用当前总执行时间的值更新前次总执行时间的值。
通过上述技术手段,前次总执行时间更新模块可以实时更新前次总执行时间,保障下次任务分配过程中分配策略执行的准确性。
在本申请实施例中,所述装置还包括:
任务执行时间统计模块,用于在执行任务时,统计对应的任务消耗时间;
最新总执行时间计算模块,用于根据任务消耗时间和对应调度线程的当前总执行时间计算执行完对应任务后的最新总执行时间;
当前总执行时间更新模块,用于根据最新总执行时间的值更新对应调度线程的当前总执行时间的值。
通过上述技术手段,可以实现第一总执行时间及时更新,以使后续任务分配更均衡。
所述多线程任务调度装置包括处理器和存储器,上述第一调度线程获取模块、第二调度线程获取模块、目标调度线程获取模块、前次总执行时间更新模块、任务执行时间统计模块、最新总执行时间计算模块和当前总执行时间更新模块等均作为程序单元存储在存储器中,由处理器执行存储在存储器中的上述程序模块中实现相应的功能。各个程序模块构成的计算机程序使得处理器执行本说明书中描述的本申请各个实施例的多线程任务调度方法中的步骤。
本申请第三方面提供一种处理器,被配置成执行所述的多线程任务调度方法。
处理器中包含内核,由内核去存储器中调取相应的程序单元。内核可以设置一个或以上,通过调整内核参数来实现多线程任务调度方法。
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM),存储器包括至少一个存储芯片。
本申请第四方面提供一种机器可读存储介质,该机器可读存储介质上存储有指令,该指令在被处理器执行时使得所述处理器被配置成执行所述的多线程任务调度方法。
本申请第五方面提供一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现所述的多线程任务调度方法。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图7所示。该计算机设备包括通过***总线连接的处理器A01、网络接口A02、存储器(图中未示出)和数据库(图中未示出)。其中,该计算机设备的处理器A01用于提供计算和控制能力。该计算机设备的存储器包括内存储器A03和非易失性存储介质A04。该非易失性存储介质A04存储有操作***B01、计算机程序B02和数据库(图中未示出)。该内存储器A03为非易失性存储介质A04中的操作***B01和计算机程序B02的运行提供环境。该计算机设备的数据库用于存储记录的第一总执行时间和第二总执行时间等数据。该计算机设备的网络接口A02用于与外部的终端通过网络连接通信。该计算机程序B02被处理器A01执行时以实现一种多线程任务调度方法。
本领域技术人员可以理解,图7中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
本领域内的技术人员应明白,本申请的实施例可提供为方法、***、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器 (CPU)、输入/输出接口、网络接口和内存。
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。存储器是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体,可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存 (PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器 (DRAM)、其他类型的随机存取存储器 (RAM)、只读存储器(ROM)、电可擦除可编程只读存储器 (EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器 (CD-ROM)、数字多功能光盘 (DVD) 或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体 (transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。
以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (10)
1.一种多线程任务调度方法,其特征在于,所述方法包括:
从调度线程中随机获取第一调度线程;
从所述第一调度线程前后相邻的调度线程中获取预设数量的第二调度线程;
比较第二调度线程各自的当前总执行时间和对应的前次任务分配时的前次总执行时间;
若所有第二调度线程各自的当前总执行时间与对应的前次总执行时间相同,则确定第一调度线程为任务分配的目标调度线程;
若确定存在当前总执行时间与对应的前次总执行时间不同的第二调度线程,则将确定的第二调度线程的当前总执行时间与第一调度线程的当前总执行时间进行比较,确定当前总执行时间最短的调度线程为任务分配的目标调度线程。
2.根据权利要求1所述的多线程任务调度方法,其特征在于,所述方法还包括:
分别为各任务产生线程设置一个前次总执行时间数组,所述前次总执行时间数组中记录了各调度线程在对应任务产生线程前次任务分配时的前次总执行时间;
比较第二调度线程各自的当前总执行时间和对应的前次任务分配时的前次总执行时间,包括:
比较第二调度线程各自的当前总执行时间和任务产生线程记录的前次任务分配时的前次总执行时间。
3.根据权利要求1所述的多线程任务调度方法,其特征在于,所述方法还包括:
在确定当前总执行时间与前次总执行时间不相同的情况下,使用当前总执行时间的值更新前次总执行时间的值。
4.根据权利要求1所述的多线程任务调度方法,其特征在于,所述方法还包括:
在首次分配任务时,将任务随机分配到所有调度线程。
5.根据权利要求1所述的多线程任务调度方法,其特征在于,所述方法还包括:
各调度线程在执行任务时,统计对应的任务消耗时间;
根据任务消耗时间和对应调度线程的当前总执行时间计算执行完对应任务后的最新总执行时间;
根据最新总执行时间的值更新对应调度线程的当前总执行时间的值。
6.一种多线程任务调度装置,其特征在于,所述装置包括:
第一调度线程获取模块,用于从调度线程中随机获取第一调度线程;
第二调度线程获取模块,用于从所述第一调度线程前后相邻的调度线程中获取预设数量的第二调度线程;
目标调度线程获取模块,用于比较第二调度线程各自的当前总执行时间和对应的前次任务分配时的前次总执行时间;若所有第二调度线程各自的当前总执行时间与对应的前次总执行时间相同,则确定第一调度线程为任务分配的目标调度线程;若确定存在当前总执行时间与对应的前次总执行时间不同的第二调度线程,则将确定的第二调度线程的当前总执行时间与第一调度线程的当前总执行时间进行比较,确定当前总执行时间最短的调度线程为任务分配的目标调度线程。
7.根据权利要求6所述的多线程任务调度装置,其特征在于,所述装置还包括:
前次总执行时间更新模块,用于在确定当前总执行时间与前次总执行时间不相同的情况下,使用当前总执行时间的值更新前次总执行时间的值。
8.根据权利要求6所述的多线程任务调度装置,其特征在于,所述装置还包括:
任务执行时间统计模块,用于在执行任务时,统计对应的任务消耗时间;
最新总执行时间计算模块,用于根据任务消耗时间和对应调度线程的当前总执行时间计算执行完对应任务后的最新总执行时间;
当前总执行时间更新模块,用于根据最新总执行时间的值更新对应调度线程的当前总执行时间的值。
9.一种处理器,其特征在于,被配置成执行权利要求1至5中任一项所述的多线程任务调度方法。
10.一种机器可读存储介质,该机器可读存储介质上存储有指令,其特征在于,该指令在被处理器执行时使得所述处理器被配置成执行权利要求1至5中任一项所述的多线程任务调度方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310800207.6A CN116521351B (zh) | 2023-07-03 | 2023-07-03 | 多线程任务调度方法、装置、存储介质及处理器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310800207.6A CN116521351B (zh) | 2023-07-03 | 2023-07-03 | 多线程任务调度方法、装置、存储介质及处理器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116521351A CN116521351A (zh) | 2023-08-01 |
CN116521351B true CN116521351B (zh) | 2023-09-05 |
Family
ID=87390665
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310800207.6A Active CN116521351B (zh) | 2023-07-03 | 2023-07-03 | 多线程任务调度方法、装置、存储介质及处理器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116521351B (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1808386A (zh) * | 2005-01-18 | 2006-07-26 | 华为技术有限公司 | 处理多线程/多任务/多处理器的方法 |
CN101135981A (zh) * | 2007-08-29 | 2008-03-05 | 中兴通讯股份有限公司 | 一种实现批量报表生成的方法及装置 |
US9952900B1 (en) * | 2016-12-01 | 2018-04-24 | International Business Machines Corporation | Run time task scheduling based on metrics calculated by micro code engine in a socket |
CN112328392A (zh) * | 2020-10-27 | 2021-02-05 | 金蝶软件(中国)有限公司 | 一种数据处理方法及相关设备 |
CN113778650A (zh) * | 2021-09-14 | 2021-12-10 | 北京沃东天骏信息技术有限公司 | 任务调度方法、装置、电子设备及存储介质 |
CN114880102A (zh) * | 2022-07-04 | 2022-08-09 | 北京智芯半导体科技有限公司 | 安全芯片及其多任务调度方法和装置、存储介质 |
CN115061824A (zh) * | 2022-06-30 | 2022-09-16 | 平安银行股份有限公司 | 一种名单派发方法、装置及电子设备 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7313673B2 (en) * | 2005-06-16 | 2007-12-25 | International Business Machines Corporation | Fine grained multi-thread dispatch block mechanism |
EP1914632B1 (en) * | 2005-08-09 | 2012-06-27 | Fujitsu Ltd. | Schedule control program and schedule control method |
US8645963B2 (en) * | 2009-11-05 | 2014-02-04 | International Business Machines Corporation | Clustering threads based on contention patterns |
CN103870327A (zh) * | 2012-12-18 | 2014-06-18 | 华为技术有限公司 | 一种实时多任务调度方法和装置 |
GB2521155B (en) * | 2013-12-10 | 2021-06-02 | Advanced Risc Mach Ltd | Configuring thread scheduling on a multi-threaded data processing apparatus |
US10061619B2 (en) * | 2015-05-29 | 2018-08-28 | Red Hat, Inc. | Thread pool management |
US20190258510A1 (en) * | 2018-02-20 | 2019-08-22 | Ca, Inc. | Processor starvation detection |
-
2023
- 2023-07-03 CN CN202310800207.6A patent/CN116521351B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1808386A (zh) * | 2005-01-18 | 2006-07-26 | 华为技术有限公司 | 处理多线程/多任务/多处理器的方法 |
CN101135981A (zh) * | 2007-08-29 | 2008-03-05 | 中兴通讯股份有限公司 | 一种实现批量报表生成的方法及装置 |
US9952900B1 (en) * | 2016-12-01 | 2018-04-24 | International Business Machines Corporation | Run time task scheduling based on metrics calculated by micro code engine in a socket |
CN112328392A (zh) * | 2020-10-27 | 2021-02-05 | 金蝶软件(中国)有限公司 | 一种数据处理方法及相关设备 |
CN113778650A (zh) * | 2021-09-14 | 2021-12-10 | 北京沃东天骏信息技术有限公司 | 任务调度方法、装置、电子设备及存储介质 |
CN115061824A (zh) * | 2022-06-30 | 2022-09-16 | 平安银行股份有限公司 | 一种名单派发方法、装置及电子设备 |
CN114880102A (zh) * | 2022-07-04 | 2022-08-09 | 北京智芯半导体科技有限公司 | 安全芯片及其多任务调度方法和装置、存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN116521351A (zh) | 2023-08-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2013506179A (ja) | 命令スレッドを組み合わせた実行の管理システムおよび管理方法 | |
US8060610B1 (en) | Multiple server workload management using instant capacity processors | |
CN110308982B (zh) | 一种共享内存复用方法及装置 | |
WO2009098547A1 (en) | Memory management | |
US8024739B2 (en) | System for indicating and scheduling additional execution time based on determining whether the execution unit has yielded previously within a predetermined period of time | |
US20210157635A1 (en) | Determining an optimum number of threads to make available per core in a multi-core processor complex to execute tasks | |
KR101553650B1 (ko) | 멀티코어 시스템에서의 로드 밸런싱 장치 및 방법 | |
CN103329102A (zh) | 多处理器*** | |
US8296552B2 (en) | Dynamically migrating channels | |
US10360079B2 (en) | Architecture and services supporting reconfigurable synchronization in a multiprocessing system | |
US20110276979A1 (en) | Non-Real Time Thread Scheduling | |
CN112114877B (zh) | 一种动态补偿线程束warp的方法、处理器及计算机存储介质 | |
US20150212859A1 (en) | Graphics processing unit controller, host system, and methods | |
CN116521351B (zh) | 多线程任务调度方法、装置、存储介质及处理器 | |
WO2017018976A1 (en) | Lock manager | |
US11487671B2 (en) | GPU cache management based on locality type detection | |
EP1654635A2 (en) | Method and computer system for accessing thread private data | |
CN116719646A (zh) | 热点数据处理方法、装置、电子装置和存储介质 | |
CN113806089B (zh) | 集群负载资源调度方法、装置、电子设备及可读存储介质 | |
CN114157717B (zh) | 一种微服务动态限流的***及方法 | |
CN110879748A (zh) | 一种共享资源分配方法、装置和设备 | |
US20130014123A1 (en) | Determination of running status of logical processor | |
CN112860779A (zh) | 一种批量数据导入方法及装置 | |
CN113626383A (zh) | 一种数据处理方法、装置及设备 | |
KR20180082560A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |