线程调度管理方法、装置、计算机设备和存储介质与流程

文档序号:15462296发布日期:2018-09-18 18:27阅读:141来源:国知局

本申请涉及计算机技术领域,特别是涉及一种线程调度管理方法、装置、计算机设备和存储介质。



背景技术:

随着计算机技术的发展,计算机设备在运行过程中,可动态的对处理器上的线程进行调度,以使得线程在各处理器上达到负载均衡,提高线程的执行效率。对于处理器上的线程,存在优先级的差别,现有的线程调度方法中,仅根据线程的优先级选择线程进行调度,而由于不同的线程拥有不同的负载量,采用这种线程调度方法可能导致将线程调度后出现负载不均衡的情形,即出现过调度的问题。因此,如何解决线程调度过程中过调度的问题成为目前需要解决的一个技术问题。



技术实现要素:

基于此,有必要针对上述技术问题,提供一种能够解决线程调度过程中过调度问题的线程调度管理方法、装置、计算机设备和存储介质。

一种线程调度管理方法,所述方法包括:

选择迁出处理器和迁入处理器,判断迁出处理器和迁入处理器是否满足线程迁移条件;其中,所述迁出处理器包括一个或多个线程队列;

若是,查找运行于迁出处理器上的线程队列内的线程,计算查找到的线程对应的剩余待迁移负载量;

根据剩余待迁移负载量选择目标线程,将所述目标线程调度至迁入处理器。

在其中一个实施例中,所述查找运行于迁出处理器上的线程队列内的步骤包括:获取所述迁出处理器所在的处理器核群信息和迁入处理器所在的处理器核群信息;当所述迁出处理器与所述迁入处理器在同一处理器核群时,获取迁出处理器上优先级最高的线程队列内的线程个数;若所述线程个数为多个,则按照优先级从高至低的顺序查找线程队列;若所述线程个数为一个,则按照优先级从低至高的顺序查找线程队列。

在其中一个实施例中,所述方法还包括:当所述迁出处理器所在的处理器核群为小核群,迁入处理器所在的处理器核群为大核群时,执行下列步骤:若迁入处理器上无执行预定任务的线程运行,则按照负载量从高至低的顺序查找执行预定任务线程的线程队列;若迁出处理器上无执行预定任务的线程运行且迁入处理器上运行有执行预定任务的线程,则结束查找。

在其中一个实施例中,所述方法还包括:当所述迁出处理器所在的处理器核群为大核群,迁入处理器所在的处理器核群为小核群时,执行下列步骤:若迁出处理器上执行预定任务的线程的总负载量为大核群中最大的,则根据线程的负载量从小至大的顺序查找执行预定任务的线程队列;否则结束查找执行预定任务的线程队列。

在其中一个实施例中,所述方法还包括:获取正在运行的线程所对应的存储资源信息;利用所述存储资源信息统计所述正在运行的线程在预设时间内访问输入输出设备的次数;若所述访问输入输出设备的次数大于第一阈值,则将所述正在运行的线程记录为第一类型线程。

在其中一个实施例中,所述方法还包括:获取正在运行的线程所对应的存储资源信息;利用所述存储资源信息统计所述正在运行的线程在预设时间内访问内存的次数;若所述访问内存的次数大于第二阈值,则将所述正在运行的线程记录为第二类型线程。

一种线程调度管理装置,所述装置包括:

选择模块,用于选择迁出处理器和迁入处理器,判断迁出处理器和迁入处理器是否满足线程迁移条件;其中,所述迁出处理器包括一个或多个线程队列;

查找模块,用于若满足迁移条件,查找运行于迁出处理器上的线程队列内的线程,计算查找到的线程对应的剩余待迁移负载量;

调度模块,用于根据剩余待迁移负载量选择目标线程,将所述目标线程调度至迁入处理器。

一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:选择迁出处理器和迁入处理器,判断迁出处理器和迁入处理器是否满足线程迁移条件;其中,所述迁出处理器包括一个或多个线程队列;若是,查找运行于迁出处理器上的线程队列内的线程,计算查找到的线程对应的剩余待迁移负载量;根据剩余待迁移负载量选择目标线程,将所述目标线程调度至迁入处理器。

一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:选择迁出处理器和迁入处理器,判断迁出处理器和迁入处理器是否满足线程迁移条件;其中,所述迁出处理器包括一个或多个线程队列;若是,查找运行于迁出处理器上的线程队列内的线程,计算查找到的线程对应的剩余待迁移负载量;根据剩余待迁移负载量选择目标线程,将所述目标线程调度至迁入处理器。

上述线程调度管理方法、装置、计算机设备和存储介质,终端通过计算线程的剩余待迁移负载量,根据剩余待迁移负载量选择目标线程,将目标线程调度至迁入处理器,使得能够选择负载量最合适的线程进行调度,避免了调度的线程负载量过大,从而出现过调度的问题,提高了线程调度的可靠性。

附图说明

图1为一个实施例中线程调度管理方法的流程示意图;

图2为一个实施例中的线程状态图;

图3为一个实施例中查找运行于迁出处理器上的线程队列内的步骤的流程示意图;

图4a为一个实施例的正在运行的线程的状态示意图;

图4b为图4a的线程迁移状态示意图;

图5为一个实施例中线程调度管理装置的结构框图;

图6为一个实施例中计算机设备的内部结构图。

具体实施方式

为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。

在一个实施例中,如图1所示,提供了一种线程调度管理方法,以该方法应用于终端为例进行说明,包括以下步骤:

步骤102,选择迁出处理器和迁入处理器,判断迁出处理器和迁入处理器是否满足线程迁移条件;其中,迁出处理器包括一个或多个线程队列。

终端的处理器可以为中央处理器(Central Processing Unit,CPU),图形处理器(Graphics Processing Unit,GPU)、视频处理单元(Video Processing Unit,VPU)等中的至少一种。终端的处理器可以为单核架构,也可以为多核架构,当为多核架构时,多核架构中的一个核心视为一个处理器。本实施例以终端的处理器为多核架构为例,其中,迁入处理器和迁出处理器分别为一个核心。

终端在运行过程中的任意时刻,各处理器上处理的线程可能会处于负载不均衡的情况,当负载不均衡时,则会出现一些处理器上处于就绪队列等待处理器时间的线程过多,而另一些处理器上运行的线程过少,导致整体线程处理效率低。为了提高线程处理效率,需要对线程在各处理器之间进行调度使各处理器达到负载均衡。

终端选择迁出处理器和迁入处理器。终端可以随机选择两个处理器分别作为迁出处理器和迁入处理器,终端还可以根据处理器的地址信息依序选择两个处理器分别作为迁出处理器和迁入处理器。进一步地,终端判断迁出处理器和迁入处理器是否满足线程迁移条件。具体地,终端获取迁出处理器的剩余可负载量以及迁入处理器的剩余可负载量,计算迁入处理器的剩余可负载量与迁出处理器的剩余可负载量的差值,当该差值大于预设值时,则判断满足线程迁移条件。其中,处理器拥有固定的总负载量,总负载量为处理器最大可处理的线程的负载量,处理器的剩余负载量为处理器的总负载量与当前运行在处理器上的线程负载量的差值。

迁出处理器包括一个或多个线程队列。同一个线程队列内的多个线程拥有相同的优先级,不同的线程队列内的线程分别拥有不同的优先级。本实施例中,将执行预定任务的线程记为第一线程,将第一线程唤醒的线程记为第二线程。终端将第一线程分配第一优先级,将第二线程分配第二优先级。其中,第一优先级可以为最高的优先级,第二优先级可以为最高的优先级,也可以为仅次于最高的优先级,还可以为最低的优先级。本实施例中,第一优先级为最高的优先级,第二优先级为仅次于最高的优先级。进一步地,终端将执行其他任务的线程分配最低的优先级。例如终端将执行预定任务的线程的优先级分配为1,将由执行预定任务的线程唤醒的线程的优先级分配为2,将执行其他任务的线程的优先级分配为3,其中,1、2、3为依次降低的优先级。

预定任务包括绘制画面、播出声音、响应回馈等任务。预定任务是预先通过判断正在终端的处理器上运行的线程的处理器内是否存在预定标记来识别确定的。其中,一个预定任务具有对应的预定任务标识,预定任务标识被预记录在文件中。记录预定任务标识的文件,可以称为线程标识文件,线程标识文件可以采用数据库表的形式。线程标识文件存储于终端的存储资源内,存储资源包括但不限于寄存器、高速缓存、内存和外部存储设备等。

线程包括多个状态,新建状态、就绪状态、运行状态、阻塞状态以及死亡状态。如图2所示,线程从创建、运行到结束总是处于其中一个状态。线程运行过程中,可能由于各种原因进入阻塞状态,处于阻塞状态的线程没有运行结束,会暂时让出处理器,进入等待队列。处于阻塞状态的线程并不自动开始运行,可以通过唤醒使其恢复运行。线程运行过程中,还可能由于执行结束正常退出或者由于异常导致执行终止而进入死亡状态。一个执行预定任务的线程在运行过程中,可以唤醒多个线程。执行预定任务的线程所唤醒的线程标识也被预记录在线程标识文件中。具体地,被唤醒的线程的标识与唤醒其的执行预定任务的线程标识相对应的记录在线程标识文件中。

步骤104,若是,查找运行于迁出处理器上的线程队列,计算查找的线程对应的剩余待迁移负载量。

若迁出处理器和迁入处理器满足线程迁移条件,则终端查找运行于迁出处理器上的线程队列。其中,线程迁移条件包括当前待迁移负载量大于预设值,当前待迁移负载量为迁入处理器的剩余可负载量与迁出处理器的剩余可负载量的差值。本实施例中,终端首先查找优先级最高的线程队列。进一步地,终端每查找到一个线程,计算查找到的线程对应的剩余待迁移负载量。其中,剩余待迁移负载量为若将该线程调度至迁入处理器后,迁入处理器的剩余可负载量和迁出处理器的剩余可负载量的差值。例如,若当前迁入处理器的剩余可负载量为m,迁出处理器的剩余可负载量为n,终端查找到的线程的负载量为p,则该线程对应的剩余待迁移负载量为(m-p)-(n+p)=m-n-2p。

步骤106,根据剩余待迁移负载量选择目标线程,将目标线程调度至迁入处理器。

终端查找线程队列时,对查找到的线程判断是否选择该线程为目标线程。具体地,终端根据线程的负载量和对应的剩余待迁移负载量判断是否选择该线程为目标线程。更具体地,当该线程的负载量小于两倍的剩余待迁移负载量时,终端选择该线程为目标线程。进一步地,终端的调度器将目标线程调度至迁入处理器。

本实施例中,终端通过计算线程的剩余待迁移负载量,根据剩余待迁移负载量选择目标线程,将目标线程调度至迁入处理器,使得能够选择负载量最合适的线程进行调度,避免了调度的线程负载量过大,从而出现过调度的问题,提高了线程调度的可靠性。

在其中一个实施例中,线程调度管理方法还包括:判断当前查找的线程队列所对应的线程是否在迁出处理器和迁入处理器上达到负载均衡;若是,则查找下一个线程队列;若否,则继续查找当前线程队列。

由于不同的线程对处理器的需求不同,例如执行预定任务的线程需要被高效地执行,以保证预定任务的执行效率,因而需要保证执行预定任务的线程始终获得更优的处理器。不同的线程占用的处理器时间也不同,例如执行优先级为A的A线程占用的处理器时间为a,执行优先级为B的B线程占用的处理器时间为b,若三个A线程的负载量和一个A线程四个B线程的负载量相同,在负载均衡的前提下,将三个A线程分配在一个处理器上运行,一个A线程和四个B线程分配在另一个处理器上运行,对于运行三个A线程的处理器,一个A线程等待处理器的时间为运行两个A线程的时间,即等待时间为2a,而对于运行一个A线程四个B线程的处理器,A线程等待处理器的时间为运行四个B线程的时间,即等待时间为4b,由于运行两个A线程的时间可能与运行四个B线程的时间不同,则对于两个处理器上的A线程,等待处理器的时间不同,则A线程的执行效率也不同,即A线程在执行效率上并未在各处理器上达到均衡,因此有必要针对不同优先级的线程在各处理器上均衡调度,使得各优先级的线程分别在各处理器上达到均衡。

终端判断当前查找的线程队列所对应的线程是否在迁出处理器和迁入处理器上达到负载均衡。具体地,终端获取迁出处理器上该线程队列的线程个数以及迁入处理器上该线程队列的线程个数的差值,当该差值的绝对值小于或等于预设阈值时,则判断当前查找的线程队列所对应的线程在迁出处理器和迁入处理器上已达到负载均衡,当该差值的绝对值大于预设阈值时,则判断当前查找的线程队列所对应的线程在迁出处理器和迁入处理器上未达到负载均衡。

进一步地,若当前查找的线程队列所对应的线程在迁出处理器和迁入处理器上未达到负载均衡,则终端继续查找当前线程队列。具体地,终端按照优先级队列中线程的存储顺序依次查找当前线程队列,对查找到的线程执行步骤104。若当前查找的线程队列所对应的线程在迁出处理器和迁入处理器上已达到负载均衡,则终端查找下一个线程队列。具体地,终端查找下一个优先级对应的线程队列,执行步骤104。

进一步地,终端判断迁出处理器和迁入处理器是否达到负载均衡,若是则结束对线程的查找,即结束对线程的调度,否则继续查找线程队列。具体地,终端将目标线程调度至迁入处理器后,计算当前待迁移负载量,若当前待迁移负载量小于预设值,则结束迁移。

本实施例中,若当前查找的线程队列所对应的线程在迁出处理器和迁入处理器上达到负载均衡,终端则查找下一个线程队列进行线程调度,否则继续查找当前线程队列进行线程调度,使得不同优先级的线程在迁出处理器和迁入处理器上达到负载均衡,从而有效提高了线程的执行效率和处理器的利用率。

在一个实施例中,判断迁出处理器和迁入处理器是否满足线程迁移条件的步骤包括:当迁出处理器和迁入处理器满足下列条件之一时:1)迁入处理器上运行有执行预定任务的线程;2)迁出处理器上可选的待迁移线程为执行预定任务的线程,且迁入处理器不处于闲置状态;则判断为不满足线程迁移条件;否则判断为满足线程迁移条件。

本实施例中,进一步根据执行预定任务的线程对线程迁移条件进行限定,使得执行预定任务的线程在迁移最少的前提下获得最优的处理器,以提高执行预定任务的线程的执行效率。具体地,终端判断迁出处理器和迁入处理器是否满足下列两个条件之一:

1)迁入处理器上运行有执行预定任务的线程。进一步地,迁入处理器上运行有预定任务线程且在终端所有处理器中执行预定任务的线程的个数非最少。为了保证执行预定任务的线程能够被高效地执行,降低其等待处理器的时间是必要的,当执行预定任务的线程的处理器上线程增多时,执行预定任务的线程等待处理器的时间将增加,因此,可以将在迁入处理器上运行的执行预定任务的线程的个数为终端所有处理器中非最少作为不满足线程迁移的条件。

2)迁出处理器上可选的待迁移线程仅有一个且为执行预定任务的线程,且迁入处理器不处于闲置状态。其中,可选的待迁移线程为处于处理器的就绪队列上的线程,若处于就绪队列上的线程有且仅有一个且为执行预定任务的线程,而迁入处理器不处于闲置状态,即该执行预定任务的线程若被调度至迁入处理器,无法立即被执行,该线程等待的最少时间为迁入处理器执行完正在占用处理器时间的线程所用的时间,而该线程若不被调度至迁入处理器,也仅需等待当前占用迁出处理器的线程被执行完毕,而终端的调度器在对线程进行调度时需要占用终端的资源和一定的处理时间,影响线程执行效率,因而在此种情况下,可以不作线程调度,即条件2)可以作为不满足线程迁移的条件。

终端判断迁出处理器和迁入处理器是否满足条件1)的步骤具体为:终端查找迁入处理器,获取迁入处理器上运行的线程的标识,根据线程的标识查找线程标识文件,判断获取的线程的标识是否记录在线程标识文件中,若是,则迁入处理器上运行有执行预定任务的线程,即满足条件1),若否,则不满足。

终端判断迁出处理器和迁入处理器是否满足条件2)的步骤具体为:终端查找迁出处理器,获取迁出处理器的就绪队列上的线程的标识,根据线程的标识查找线程标识文件,判断获取的线程的标识是否记录在线程标识文件中,进一步地,终端获取迁出处理器就绪队列上的线程的标识记录在线程标识文件中的个数。终端查找迁入处理器上的线程,获取迁入处理器上的线程个数。若迁出处理器就绪队列上的线程的标识记录在线程标识文件中的个数为一个,且迁入处理器上的线程个数为一个或多个,则判断满足条件2),否则不满足。

若迁出处理器和迁入处理器满足条件1)或条件2),则终端判断迁出处理器和迁入处理器不满足线程迁移的条件,终端结束线程的迁移。若迁条件1)和条件2)均不满足,则终端判断迁出处理器和迁入处理器满足线程迁移的条件,终端执行步骤102。

本实施例中,当迁入处理器上运行有执行预定任务的线程,或者迁出处理器上可选的待迁移线程仅有一个且为执行预定任务的线程、迁入处理器不处于闲置状态时,结束线程的迁移,从而降低执行预定任务的线程的处理器竞争,使得执行预定任务的线程能够被高效的执行。

在一个实施例中,如图3所示,查找运行于迁出处理器上的线程队列内的步骤包括:

步骤302,获取迁出处理器所在的处理器核群信息和迁入处理器所在的处理器核群信息。

对于多处理器的终端,处理器可能是同质共构的架构,还可能是异质共构的架构。其中,同质共构是指多个处理器处于相同的处理器核群,同一处理器核群中的多个处理器拥有相同的结构和性能,即拥有相同的时钟频率,也即多个处理线程的效率相同。异质共构是指多个处理器处于多个不同的处理器核群,不同的处理器核群中的处理器拥有不同的结构和性能,其时钟频率也不同,即处理线程的效率不同。因此,有必要针对处理器所在的处理器核群对线程进行调度,从而使得优先级较高的线程优先被调度至处理效率更高的处理器。

本实施例中,终端获取迁出处理器所在的处理器核群信息和迁入处理器所在的处理器核群信息。具体地,终端获取迁出处理器的信息,分析迁出处理器的信息,得到迁出处理器所在的处理器核群信息。同样的,终端获取迁入处理器所在的处理器核群信息。进一步地,终端根据迁出处理器所在的处理器核群信息和迁入处理器所在的处理器核群信息判断迁出处理器所在的处理器核群和迁入处理器所在的处理器核群是否为同一个。

步骤304,当迁出处理器与迁入处理器在同一处理器核群时,获取迁出处理器上优先级最高的线程队列内的线程个数;若线程个数为多个,则按照优先级从高至低的顺序查找线程队列,若线程个数为一个,则按照优先级从低至高的顺序查找线程队列。

当迁出处理器与迁入处理器在同一处理器核群时。进一步地,终端获取迁出处理器上优先级最高的线程队列内的线程个数,当该线程个数为多个时,终端按照优先级从高至低的顺序查找线程队列。具体地,终端选取优先级最高的线程队列,执行步骤104。若该线程个数为一个,则终端按照优先级从低至高的顺序查找线程队列,执行步骤104。

本实施例中,当迁出处理器上优先级最高的线程为多个时,从优先级最高的线程队列内的线程开始查找并进一步调度,可以保证优先级最高的线程能够在迁出处理器和迁入处理器上达到负载均衡保证其执行效率,而当迁出处理器上优先级最高的线程仅为一个时,优先从优先级最低的线程队列进行查找,进而进行调度,可以保证在优先级最高的线程在迁出处理器和迁入处理器上负载均衡的前提下不被调度,使得其可以保留在迁出处理器上执行,从而避免了调度过程带来的线程执行效率降低,使得优先级最高的线程始终拥有最高的执行效率。

在一个实施例中,查找运行于迁出处理器上的线程队列内的步骤包括还包括:步骤306,当迁出处理器所在的处理器核群为小核群,迁入处理器所在的处理器核群为大核群时,执行下列步骤:若迁入处理器上无执行预定任务的线程运行,则按照负载量从高至低的顺序查找执行预定任务线程的线程队列;若迁出处理器上无执行预定任务的线程运行且迁入处理器上运行有执行预定任务的线程,则结束查找。

其中,对于处理器为异质共构架构的终端,终端内的处理器一般分为大核和小核,大核和小核均具有各自固定的逻辑结构,包括缓存、执行单元、指令级单元和总线接口等逻辑单元。由多个大核组成的核群为大核群,由小核组成的核群为小核群。大核的逻辑单元拥有比小核更优的性能,例如大核的时钟频率比小核的时钟频率大,即大核群的线程执行效率高于小核群的线程执行效率,为保证优先级较高的线程拥有较高的处理效率,有必要考虑小核群和大核群的处理效率来对线程进行调度。

本实施例中,当迁出处理器所在的处理器核群为小核群,迁入处理器所在的处理器核群为大核群时,即迁出处理器的线程处理效率低于迁入处理器的线程处理效率时,进一步地,终端判断迁入处理器上是否存在执行预定任务的线程。具体地,终端获取迁入处理器上的线程,查找线程标识文件,判断迁入处理器上的线程的标识是否记录于线程标识文件中,获取迁入处理器上的执行预定任务线程的个数。进一步地,若迁入处理器上无执行预定任务的线程,则终端按照负载量从高至低的顺序查找迁出处理器上的执行预定任务线程的线程队列。具体地,终端获取迁出处理器上的执行预定任务线程及其负载量,根据负载量的大小对执行预定任务的线程进行排序,进一步地,终端按照负载量由大至小的顺序查找执行预定任务线程的线程队列,执行步骤104。若迁出处理器上无执行预定任务的线程运行且迁入处理器上运行有执行预定任务的线程,则结束查找。

本实施例中,当迁入处理器上执行预定任务的线程时,优先将迁出处理器上负载量最大的执行预定任务的线程调度至迁入处理器,使得能够在调度最少的情况下将执行预定任务的线程在迁出处理器和迁入处理器上达到负载均衡,而当迁入处理器上有执行预定任务的线程而迁出处理器上无执行预定任务的线程时,结束查找,即结束迁出处理器和迁入处理器之间的线程调度,保障执行预定任务的线程能够最大效率的在迁入处理器上执行,从而进一步提高了执行预定任务的效率。

在一个实施例中,查找运行于迁出处理器上的线程队列内的步骤包括还包括:步骤308,当迁出处理器所在的处理器核群为大核群,迁入处理器所在的处理器核群为小核群时,执行下列步骤:若迁出处理器上执行预定任务的线程的总负载量为大核群中最大的,则根据线程的负载量从小至大的顺序查找执行预定任务的线程队列;否则结束查找执行预定任务的线程队列。

本实施例中,当迁出处理器所在的处理器核群为大核群,迁入处理器所在的处理器核群为小核群时,即迁出处理器的线程处理效率高于迁入处理器的线程处理效率时,进一步地,终端判断迁入处理器上是否存在执行预定任务的线程。具体地,终端获取迁出处理器上执行预定任务的线程及各线程的负载量,将各执行预定任务的线程的负载量求和,得到执行预定任务的线程的总负载量,进一步地,终端获取终端内其他处理器上执行预定任务的线程的总负载量,判断迁出处理器上执行预定任务的线程的总负载量是否为终端内所有处理器上执行预定任务的线程的总负载量中最大的,若是,则终端根据线程的负载量从小至大的顺序查找执行预定任务的线程队列。否则终端结束查找执行预定任务的线程队列,进一步地,终端按照优先级由低至高的顺序查找线程队列,执行步骤104。

本实施例中,当迁出处理器上执行预定任务的线程的总负载量最大时,则选择负载量最大的执行预定任务的线程调度至迁入处理器,否则不调度执行预定任务的线程,使得执行预定任务的线程能够最大限度的保留在执行效率更高的迁出处理器上,保证预定任务能够被更高效地执行。

在一个实施例中,线程调度管理方法还包括:获取正在运行的线程所对应的存储资源信息;利用存储资源信息统计正在运行的线程在预设时间内访问输入输出设备的次数;若访问输入输出设备的次数大于第一阈值,则将正在运行的线程记录为第一类型线程。

线程执行的任务存在输入输出(Input/Output,I/O)密集型任务。涉及到网络、磁盘I/O的任务都是I/O密集型任务,这类任务的特点是处理器消耗很少,因为I/O的速度远远低于处理器和内存的速度,任务的大部分时间都在等待I/O操作完成。对于这类任务线程,有必要将其识别出来以便进一步地针对性管理,以提高终端运行速率。

线程处于运行状态时,线程运行所需要的原始数据来自内存。在线程运行过程中,有些数据可能被频繁读取,这些数据将被存储在寄存器和高速缓存中。当线程运行结束,这些缓存的数据在适当的时候应该写回内存。处于运行状态的线程使用的存储资源可以包括寄存器、高速缓存、内存和外部存储设备等。存储资源的信息可包括线程所使用的存储资源的地址空间。

终端可以根据线程标识文件中记录的线程标识访问线程的存储资源,获取正在运行的线程所使用的存储资源的信息。

线程的存储资源信息包含有线程运行时的运算数据,包括每一次访问I/O设备的数据,具体包括每一次访问I/O设备时I/O设备的地址信息,以及每一次访问I/O设备的访问时间。终端通过访问线程的存储资源,截取存储资源信息记录的某一个或多个线程持续执行的时间段,即预设时间,统计在此预设时间内存储资源信息中包含的I/O设备的地址信息的数目,该数目即为线程在预设时间内运行时,访问I/O设备的次数。其中,I/O设备的地址信息的种类可以为一种或多种。预设时间仅包括线程持续运行的时间段。

本实施例中,终端将统计的正在运行的线程访问I/O设备的次数,与第一阈值进行比较,当访问I/O设备的次数大于第一阈值时,在线程标识文件中增添第一类型线程,并将该正在运行的线程标识与之对应记录。其中,第一阈值为一预设的大于0的常量,本领域技术人员可根据具体的终端标准对其取值。第一类型线程即为执行I/O密集型任务的线程。

在多处理器的终端中,同时正在运行的线程可能为多个,此时,终端将访问所有正在运行的线程的存储资源,分别获取正在运行的线程所对应的存储资源信息,并统计各个正在运行的线程在预设时间内访问输入输出设备的次数,分别与第一阈值进行比较,识别记录下所有正在运行的线程中的第一类型线程。

进一步地,终端对处理器上的线程设置优先级。具体地,终端将线程优先级设为四个等级,即1、2、3、4,其中1为最高优先级,2、3、4依次降低。终端将执行预定任务的线程的优先级设为1,将第一类型线程的优先级设为2,其他线程的优先级设为3,除执行预定任务的线程和第一类型线程以外的其他线程的优先级设为4。终端的线程调度器根据优先级对线程进行调度。

如图4a所示,第一处理器(CPU0)上执行的有线程A,其中线程A为执行预定任务的执行预定任务的线程,线程A的优先级为1,第二处理器(CPU1)上执行的有线程B1和线程B2,线程B1和线程B2的优先级均已被设置为3。其中,线程B2为线程A所唤醒的线程,线程B1不是由线程A所唤醒的线程,如图4b所示,当CPU0的性能优于CPU1的性能,终端需要从CPU1上调度线程至CPU0时,终端临时将线程B2的优先级设置为2,线程调度器在CPU1上选择优先级更高的线程B2,将线程B2调度至CPU0,使得线程B2能够优先获得唤醒其的线程A所在的第一处理器,从而保障线程A执行的预定任务高效地执行。

通过本实施例的线程调度管理方法,终端统计正在运行的线程在预设时间内访问I/O设备的次数,与第一阈值进行比较,识别出并记录下线程中的I/O密集型任务线程,对执行I/O密集型任务的线程设置高于其他线程的优先级,使得执行I/O密集型任务的线程能够获得比其他线程更优的处理器,从而进一步提高了预定任务的执行效率。

在一个实施例中,线程调度管理方法还包括:获取正在运行的线程所对应的存储资源信息;利用存储资源信息统计正在运行的线程在预设时间内访问内存的次数;若访问内存的次数大于第二阈值,则将正在运行的线程记录为第二类型线程。

线程执行的任务还存在计算密集型任务。计算密集型任务的特点是要进行大量的计算,消耗处理器,例如计算圆周率、对视频进行高清解码等等。对于执行计算密集型任务的线程,其运行效率十分依赖于获得处理器的概率,因此,识别出计算密集型任务以对其进一步针对性管理有利于提高终端的运行速率。

当线程对处理器发出指令请求运算时,这些指令和数据暂存在内存里,在处理器空闲时传送给处理器,即线程每一次对处理器发出指令时,都会访问内存以暂存指令和相关数据。因此,统计线程在一定时间内访问内存的次数即可获得线程在一定时间内请求处理器的次数,从而判断其是否为执行计算密集型任务的线程。

本实施例中,终端根据文件中记录的线程标识访问线程的存储资源,获取正在运行的线程所使用的存储资源的信息。

线程的存储资源信息包括线程运行时的运算数据,运算数据包括每一次访问内存操作的数据,具体包括每一次访问内存时内存的地址信息,内存中每一条内存的地址信息均对应有一个访问时间。终端通过访问线程的存储资源,截取存储资源信息记录的某一个或多个线程持续执行的时间段,即预设时间,统计在此预设时间内存储资源信息中包含的内存的地址信息的数目,该数目即为线程在运行预设时间内访问内存的次数。其中,内存的地址信息的种类可以为一种或多种。

终端将统计的正在运行的线程访问内存的次数,与第二阈值进行比较,当访问内存的次数大于第二阈值时,在线程标识文件中增添第二类型线程,并将该正在运行的线程标识与之对应记录。其中,第二阈值为一预设的大于0的常量,本领域技术人员可根据具体的终端标准对其取值。第二类型线程即为执行计算密集型任务的线程。

在多处理器的终端中,同时正在运行的线程可能为多个,此时,终端将访问所有正在运行的线程的存储资源,分别获取正在运行的线程所对应的存储资源信息,并分别统计各个正在运行的线程在预设时间内访问内存的次数,分别与第二阈值进行比较,识别记录下所有正在运行的线程中的第二类型线程。

进一步地,终端对处理器上的线程设置优先级。具体地,终端将线程优先级设为四个等级,即1、2、3、4,其中1为最高优先级,2、3、4依次降低。终端将执行预定任务的线程的优先级设为1,将第二类型线程的优先级设为2,其他线程的优先级设为3,除执行预定任务的线程和第二类型线程以外的其他线程的优先级设为4。终端的线程调度器根据优先级对线程进行调度。

通过本实施例的线程调度管理方法,终端统计正在运行的线程在预设时间内访问内存的次数,与第二阈值进行比较,识别出并记录下线程中的计算密集型任务线程,对执行计算密集型任务的线程设置高于其他线程的优先级,使得执行计算密集型任务的线程能够获得比其他线程更优的处理器,从而进一步提高了预定任务的执行效率。

应该理解的是,虽然图1和图3的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图1和图3中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。

在一个实施例中,如图5所示,提供了一种线程调度管理装置,包括:选择模块510、查找模块520和调度模块530,其中:

选择模块510,用于选择迁出处理器和迁入处理器,判断迁出处理器和迁入处理器是否满足线程迁移条件;其中,迁出处理器包括一个或多个线程队列。

查找模块520,用于若满足迁移条件,查找运行于迁出处理器上的线程队列内的线程,计算查找到的线程对应的剩余待迁移负载量。

调度模块530,用于根据剩余待迁移负载量选择目标线程,将目标线程调度至迁入处理器。

在一个实施例中,选择模块还用于当迁出处理器和迁入处理器满足下列条件之一时:迁入处理器上运行有执行预定任务的线程;迁出处理器上可选的待迁移线程仅有一个且为执行预定任务的线程,迁入处理器不处于闲置状态;则判断为不满足线程迁移条件;否则判断为满足线程迁移条件。

在一个实施例中,查找模块还用于获取迁出处理器所在的处理器核群信息和迁入处理器所在的处理器核群信息;当迁出处理器与迁入处理器在同一处理器核群时,获取迁出处理器上优先级最高的线程队列内的线程个数;若线程个数为多个,则按照优先级从高至低的顺序查找线程队列;若线程个数为一个,则按照优先级从低至高的顺序查找线程队列。

在一个实施例中,查找模块还用于当迁出处理器所在的处理器核群为小核群,迁入处理器所在的处理器核群为大核群时,执行下列步骤:若迁入处理器上无执行预定任务的线程运行,则按照负载量从高至低的顺序查找执行预定任务线程的线程队列;若迁出处理器上无执行预定任务的线程运行且迁入处理器上运行有执行预定任务的线程,则结束查找。

在一个实施例中,查找模块还用于当迁出处理器所在的处理器核群为大核群,迁入处理器所在的处理器核群为小核群时,执行下列步骤:若迁出处理器上执行预定任务的线程的总负载量为大核群中最大的,则根据线程的负载量从小至大的顺序查找执行预定任务的线程队列;否则结束查找执行预定任务的线程队列。

在一个实施例中,线程调度管理装置还包括:分类模块,用于获取正在运行的线程所对应的存储资源信息;利用存储资源信息统计正在运行的线程在预设时间内访问输入输出设备的次数;若访问输入输出设备的次数大于第一阈值,则将正在运行的线程记录为第一类型线程。

在一个实施例中,分类模块还用于获取正在运行的线程所对应的存储资源信息;利用存储资源信息统计正在运行的线程在预设时间内访问内存的次数;若访问内存的次数大于第二阈值,则将正在运行的线程记录为第二类型线程。

关于线程调度管理装置的具体限定可以参见上文中对于线程调度管理方法的限定,在此不再赘述。上述线程调度管理装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。

在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图6所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种线程调度管理方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。

本领域技术人员可以理解,图6中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。

在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:选择迁出处理器和迁入处理器,判断迁出处理器和迁入处理器是否满足线程迁移条件;其中,迁出处理器包括一个或多个线程队列;若是,查找运行于迁出处理器上的线程队列内的线程,计算查找到的线程对应的剩余待迁移负载量;根据剩余待迁移负载量选择目标线程,将目标线程调度至迁入处理器。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:当迁出处理器和迁入处理器满足下列条件之一时:迁入处理器上运行有执行预定任务的线程;迁出处理器上可选的待迁移线程仅有一个且为执行预定任务的线程,迁入处理器不处于闲置状态;则判断为不满足线程迁移条件;否则判断为满足线程迁移条件。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:获取迁出处理器所在的处理器核群信息和迁入处理器所在的处理器核群信息;当迁出处理器与迁入处理器在同一处理器核群时,获取迁出处理器上优先级最高的线程队列内的线程个数;若线程个数为多个,则按照优先级从高至低的顺序查找线程队列;若线程个数为一个,则按照优先级从低至高的顺序查找线程队列。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:当迁出处理器所在的处理器核群为小核群,迁入处理器所在的处理器核群为大核群时,执行下列步骤:若迁入处理器上无执行预定任务的线程运行,则按照负载量从高至低的顺序查找执行预定任务线程的线程队列;若迁出处理器上无执行预定任务的线程运行且迁入处理器上运行有执行预定任务的线程,则结束查找。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:当迁出处理器所在的处理器核群为大核群,迁入处理器所在的处理器核群为小核群时,执行下列步骤:若迁出处理器上执行预定任务的线程的总负载量为大核群中最大的,则根据线程的负载量从小至大的顺序查找执行预定任务的线程队列;否则结束查找执行预定任务的线程队列。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:获取正在运行的线程所对应的存储资源信息;利用存储资源信息统计正在运行的线程在预设时间内访问输入输出设备的次数;若访问输入输出设备的次数大于第一阈值,则将正在运行的线程记录为第一类型线程。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:获取正在运行的线程所对应的存储资源信息;利用存储资源信息统计正在运行的线程在预设时间内访问内存的次数;若访问内存的次数大于第二阈值,则将正在运行的线程记录为第二类型线程。

在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:选择迁出处理器和迁入处理器,判断迁出处理器和迁入处理器是否满足线程迁移条件;其中,迁出处理器包括一个或多个线程队列;若是,查找运行于迁出处理器上的线程队列内的线程,计算查找到的线程对应的剩余待迁移负载量;根据剩余待迁移负载量选择目标线程,将目标线程调度至迁入处理器。

在一个实施例中,计算机程序被处理器执行时还实现以下步骤:当迁出处理器和迁入处理器满足下列条件之一时:迁入处理器上运行有执行预定任务的线程;迁出处理器上可选的待迁移线程仅有一个且为执行预定任务的线程,迁入处理器不处于闲置状态;则判断为不满足线程迁移条件;否则判断为满足线程迁移条件。

在一个实施例中,计算机程序被处理器执行时还实现以下步骤:获取迁出处理器所在的处理器核群信息和迁入处理器所在的处理器核群信息;当迁出处理器与迁入处理器在同一处理器核群时,获取迁出处理器上优先级最高的线程队列内的线程个数;若线程个数为多个,则按照优先级从高至低的顺序查找线程队列;若线程个数为一个,则按照优先级从低至高的顺序查找线程队列。

在一个实施例中,计算机程序被处理器执行时还实现以下步骤:当迁出处理器所在的处理器核群为小核群,迁入处理器所在的处理器核群为大核群时,执行下列步骤:若迁入处理器上无执行预定任务的线程运行,则按照负载量从高至低的顺序查找执行预定任务线程的线程队列;若迁出处理器上无执行预定任务的线程运行且迁入处理器上运行有执行预定任务的线程,则结束查找。

在一个实施例中,计算机程序被处理器执行时还实现以下步骤:当迁出处理器所在的处理器核群为大核群,迁入处理器所在的处理器核群为小核群时,执行下列步骤:若迁出处理器上执行预定任务的线程的总负载量为大核群中最大的,则根据线程的负载量从小至大的顺序查找执行预定任务的线程队列;否则结束查找执行预定任务的线程队列。

在一个实施例中,计算机程序被处理器执行时还实现以下步骤:获取正在运行的线程所对应的存储资源信息;利用存储资源信息统计正在运行的线程在预设时间内访问输入输出设备的次数;若访问输入输出设备的次数大于第一阈值,则将正在运行的线程记录为第一类型线程。

在一个实施例中,计算机程序被处理器执行时还实现以下步骤:获取正在运行的线程所对应的存储资源信息;利用存储资源信息统计正在运行的线程在预设时间内访问内存的次数;若访问内存的次数大于第二阈值,则将正在运行的线程记录为第二类型线程。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。

以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

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