一种多核系统中多线程调度方法、装置及设备
技术领域
本发明涉及计算机技术领域,具体涉及一种多核系统中多线程调度方法、装置及设备。
背景技术
对于工业物联网这样实时性强的应用领域,时延限制是性能指标,更是功能性指标。对于很多关键性的动作,必须在有限的时间内完成,低时延的线程调度是十分必要的。在多核多线程系统中,可以通过并行加快执行速度。根据阿姆达尔定律,最大加速比是由程序中的顺序部分限制的。因此临界区成为多核系统性能的瓶颈。
临界区指的是一个访问共用资源的程序片段,而这些共用资源有着无法同时被多个线程访问的特性。因此,当某一线程进入临界区时,其他需要进入该临界区的线程必须等待,有一些同步的机制必须在临界区段的进入点与离开点实现,以确保这些共用资源是被互斥获得使用,由此导致线程串行化,从而降低了并行度,影响系统性能。
因此,设法在不影响线程正常运行的情况下,避免多个线程同时访问临界区,从而降低临界区影响,从而提高并行度,进而提高系统性能,是十分必要且具有重要意义。
发明内容
本发明的目的是针对上述现有技术的不足提出的一种多核系统中多线程调度方法、装置及设备,该目的是通过以下技术方案实现的。
本发明的第一方面提出了一种多核系统中多线程调度方法,所述方法包括:
根据各线程的前后依赖关系建立DAG图,并根据各个核的就绪队列中的线程创建线程运行表、同一时间片运行同一临界区的冲突线程表及包含相同临界区的线程队列;
根据各个核的就绪队列中线程的运行变化,更新线程运行表、冲突线程表、线程队列及DAG图;
在所述DAG有更新时,检测所述DAG图的入节点并将入节点的线程添加到全局就绪队列;
根据线程运行表和冲突线程表统计所有时间片运行的线程个数,并利用线程个数和时间片数量计算多核系统的线程并行度;
若所述线程并行度小于阈值,则根据线程运行表、冲突线程表及线程队列为全局就绪队列中的线程分配核和时间片,以得到新分配方案;
根据新分配方案,将全局就绪队列中的线程分配到相应核的就绪队列中,以按照新分配方案调度运行。
本发明的第二方面提出了一种多核系统中多线程调度装置,所述装置包括:
线程组织模块,用于根据各线程的前后依赖关系建立有向无环图DAG图;在所述DAG有更新时,检测所述DAG图的入节点并将入节点的线程添加到全局就绪队列;
线程监控模块,用于根据各个核的就绪队列中的线程创建线程运行表、同一时间片运行同一临界区的冲突线程表及包含相同临界区的线程队列,并根据各个核的就绪队列中线程的运行变化,更新线程运行表、冲突线程表、线程队列及DAG图;
计算模块,用于根据线程运行表和冲突线程表统计所有时间片运行的线程个数,并利用线程个数和时间片数量计算多核系统的线程并行度;若所述线程并行度小于阈值,则根据线程运行表、冲突线程表及线程队列为全局就绪队列中的线程分配核和时间片,以得到新分配方案;
调度模块,用于根据新分配方案,将全局就绪队列中的线程分配到相应核的就绪队列中,以按照新分配方案调度运行。
本发明的第三方面提出了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现上述第一方面所述方法的步骤。
基于上述第一方面和第二方面所述的多核系统中多线程调度方法和装置,具有以下有益效果:
通过建立线程运行表、同一时间片运行同一临界区的冲突线程表及包含相同临界区的线程队列,以实时监控各个核的线程运行情况,在利用所有核的要运行的线程总数与当前时间片分段数量计算得到的线程并行度小于阈值时,为了提高系统效率,根据实时更新的线程运行表、冲突线程表及线程队列为待分配线程分配核和时间片,以避免多个线程同时访问临界区的问题,进而得到新的分配方案,并根据新的分配方案调度运行,达到提高系统效率的目的。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1为本发明根据一示例性实施例示出的一种多核系统中多线程调度方法的实施例流程图;
图2为本发明根据一示例性实施例示出的一种DAG示意图;
图3为本发明根据一示例性实施例示出的一种线程运行表示意图;
图4为本发明根据一示例性实施例示出的一种包含相同临界区的线程队列示意图;
图5为本发明根据一示例性实施例示出的一种冲突线程表示意图;
图6为本发明根据一示例性实施例示出的一种各核负载记录表示意图;
图7为本发明根据一示例性实施例示出的一种计算机设备的硬件结构图;
图8为本发明根据一示例性实施例示出的一种多核系统中多线程调度装置的实施例流程图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。
在本发明使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。在本发明和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本发明可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本发明范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
图1为本发明根据一示例性实施例示出的一种多核系统中多线程调度方法的实施例流程图,该多核系统中多线程调度方法可以应用到计算机设备上,如图1所示,该多核系统中多线程调度方法包括如下步骤:
步骤101:根据各线程的前后依赖关系建立DAG图,并根据各个核的就绪队列中的线程创建线程运行表、同一时间片运行同一临界区的冲突线程表及包含相同临界区的线程队列。
其中,参见图2所示的DAG (Directed Acyclic Graph,有向无环图)图,由多个节点组成,每个节点表示一个线程,其中分别包括111线程、236线程、147线程、389线程、256线程、333线程及127线程,节点与节点之间的有向线表示前后依赖关系,箭头所指节点表示的线程的运行依赖于另一个节点表示的线程的运行。
需要说明的是,DAG图中每个节点还包含运行标志,进入核的就绪队列中的线程对应的节点上的运行标志为1,表示运行未进入核的就绪队列中的线程对应的节点上的运行标志为0,表示未运行。
针对线程运行表的创建过程,在多核系统中,每个核对应有一个就绪队列,就绪队列中的线程均为分配给核的要运行的线程,这些线程在DAG图中的节点的运行标志为1,这些线程全部运行一次成为核的一个运行周期,通常系统会规定一个固定且合适的时间长度为一个运行周期,即各个核的运行周期相同。将运行周期划分成核中最多线程运行数量个时间片并编号,以规定核内的线程运行次序。就绪队列中的每个线程均分配有至少一个时间片,即在核上处于运行周期的第几个时间段,因此基于各核的就绪队列可以创建出一个包含线程号、线程所处时间片、线程所属核的线程运行表,如图3所示,第一列表示线程的线程号,第二列表示线程所属核和所处时间片的编号,对于多核系统,根据核数目选择合适的bit位数表示核编号,剩余合适位表示时间片的顺序号,图3中第二列前3个bit位表示所属核编号,后5个bit位表示所处时间片的顺序号。
针对包含相同临界区的线程队列的创建过程,由于线程中包含的所有临界区是按顺序执行,不会同一时间点执行所有的临界区,因此可以认为线程只有即将执行的第一个临界区。基于此,对于线程运行表中的每个线程,按照该线程即将执行的临界区,将该线程加到相应临界区的线程队列中,若是没有即将执行的临界区的线程队列,则新建队列将该线程加入。也就是说,每个线程队列中的线程均包含一个即将执行的临界区。如图4所示的一个线程队列,包含有线程111、线程137、线程264、线程125。
针对同一时间片运行同一临界区的冲突线程表的创建过程,查找线程运行表中具有相同时间片且包含同一即将执行临界区的冲突线程,将查找到的冲突线程加入到冲突线程表,如图5所示,每行中的第一列表示的线程与第二列表示的线程冲突,如第一行中,线程1与线程2为相互冲突的线程。
步骤102:根据各个核的就绪队列中线程的运行变化,更新线程运行表、冲突线程表、线程队列及DAG图。
在一些实施例中,当有线程运行完包含的一个临界区时,从该临界区的线程队列中删除该线程,检测该线程要运行的下一个临界区,并将该线程添加到下一个临界区的线程队列中,并从下一个临界区的线程队列中的其他线程获取与该线程冲突的线程后更新到冲突线程表中。
其中,在线程执行一个临界区后,如果该线程所属核与即将执行的新临界区的线程队列中的其他线程所属核不同,为了将包含相同临界区的线程分配到同一核,争取达到最优调度效果,可以对该线程进行迁移,并在迁移之后更新线程运行表。针对线程迁移的原理可以参见后面的相关阐述。
在一些实施例中,当有线程运行完时,该线程占用的时间片空出,这时可以让同核的其他线程占用该时间片,以加速推进线程的运行,因此可以从该线程所属核包含的其他线程中选取优先级最高的线程,并将空出的时间片分配给优先级最高的线程,并在线程运行表中更新优先级最高的线程占用的时间片,若优先级最高的线程有新的线程冲突产生,则更新到冲突线程表中,同时将该运行完的线程从线程运行表、冲突线程表、线程队列及DAG图中删除。
其中,线程的优先级最初是按照任务的紧急程度给定,当线程运行时,线程优先级随着已运行时间与预计总运行时间比值的增大而逐渐减小。也就是说,线程优先级具有按照时间推移逐渐减小的特点。
需要说明的是,当有新线程创建时,可以根据依赖关系找到对应的DAG图,将其加入DAG图,并按照依赖关系连接好对应的边。若是找不到对应的DAG图,则说明其与其他线程没有任何依赖关系,可以新建一个DAG图存储该线程。
步骤103:在DAG有更新时,检测DAG图的入节点并将入节点的线程添加到全局就绪队列。
其中,在DAG图有更新时,表示可能有线程运行结束,这样DAG图中就会出现新的入节点,入节点指的是DAG图中无约束的节点,如图2所示,线程111即为入节点。将入节点表示的线程加到全局就绪队列中进行排队,等待计算分配方案时分配到核运行。
步骤104:根据线程运行表和冲突线程表统计所有时间片运行的线程个数,并利用线程个数和时间片数量计算多核系统的线程并行度。
其中,在统计所有时间片运行的线程个数过程中,由于冲突线程表中记录的同一时间片访问同一临界区的冲突线程可能无法同时运行,这对于并行度有一定的影响,因此这一点需要反映到并行度的计算中。也就是说,当某一时间片有多个包含同一临界区的冲突线程时,将这多个冲突线程统计为一个线程。这样也符合同时访问临界区时,只能有一个线程能够运行的事实。
在一些实施例中,针对利用线程个数和时间片数量计算多核系统的线程并行度的过程,可以将统计得到的线程个数除以时间片数量,从而得到每个时间片上要运行的平均线程数,并将该平均线程数作为线程并行度。
其中,时间片数量指的是将运行周期划分为时间片的数量,即当前分段数量。
步骤105:若线程并行度小于阈值,则根据线程运行表、冲突线程表及线程队列为全局就绪队列中的线程分配核和时间片,以得到新分配方案。
其中,线程并行度小于阈值时,表示当前方案进行线程运行的系统效率偏低,需要对线程运行顺序进行调整以提高系统效率,依次需要进行分配方案的计算。该阈值取决于核的数目。
在一些实施例中,针对分配方案的计算过程,包括如下步骤:
步骤1051:从线程运行表和全局就绪队列包含的线程总数与核的数目之间的商与最长线程队列的长度中选取最大值作为新时间片的数量。
其中,线程运行表包含的线程和待分配的全局就绪队列包含的线程的线程总数指的是分配方案中需要分配的所有线程数,该线程总数与核数目之间的商即为运行周期最少需要划分的时间片数,再与当前包含相同临界区的最大长度值对比,取最大值作为运行周期的划分段数,通过分配前的时间片划分数量调整,以尽可能减少出现多个线程同时访问同一临界区时的串行操作的延迟,提高整体性能。
针对新的时间片数量,按照该数量划分运行周期得到的新时间片按照顺序编号后,相对于当前已经分配线程的旧时间片,如果旧时间片的顺序号处于新时间片的顺序号中,则旧时间片属于有效时间片,否则,认为旧时间片属于无效时间片了。
步骤1052:按照预设规则将线程运行表中记录的各个线程占用的时间片和所属核的信息复制到一个新建的表中。
其中,新的分配方案的计算需要考虑当前运行线程所处的核,在分配时尽可能少的在核间迁移线程以减少开销,并尽可能保证核间负载均衡,即让各核的线程数尽量相同,从而充分利用各核资源。由于新的分配方案是以线程运行表的形式进行表示,因此先新建一个表,先将已经进行核运行的线程部分,即现有的线程运行表,复制到新建的表中。
在复制过程中,每个线程仅能复制一次,即针对线程运行表中记录的占用一个时间片的线程,若该时间片属于新时间片(即时间片有效),则将该线程对应的对应的时间片和所属核的信息完全复制到新建的表中,否则(即新时间片中没有该线程占用的时间片,该时间片失效),将该线程添加到全局就绪队列中,以等待后续分配;针对线程运行表中记录的占用一个以上时间片的线程,若该线程在冲突线程表中有记录,则从占用的一个以上时间片中,选取一个属于新的时间片且与冲突线程占用的时间片不同的时间片,并将选取的时间片、该线程及所属核的信息复制到新建的表中,并更新冲突线程表。
其中,对于占用一个以上时间片的线程,如果与冲突线程占用的时间片不同的时间片均为失效时间片,即不属于新划分的时间片,则将这个线程放入全局就绪队列,以等待后续分配。
步骤1053:针对全局就绪队列中的每个线程,将该线程加到该线程要运行的第一个临界区的线程队列中,并从新时间片中选取一个该线程队列中其他线程未占用的时间片分配给该线程,再选取一个核分配给该线程,所选取的核包含的该时间片还未分配线程,将该线程和分配的核和时间片添加到新建的表中。
示例性的,针对选取一个核分配给该线程的过程,优先从该线程要运行的第一个临界区的线程队列中其他线程所属的核中,选取一个该时间片未分配线程的核分配给该线程,以保证将包含相同临界区的线程分配到同一核,争取达到最优调度效果,若其他线程所属的核包含的该时间片均分配了线程,则再从其他的核中,选取一个该时间片未分配线程的核分配给该线程。
步骤1054:若新时间片的数量为最长线程队列的长度,则将每个核中剩余未分配的时间片分配给核中优先级最高的线程,并更新新建的表中记录的优先级最高的线程占用的时间片,进而得到的新建的表中记录的各个线程占用的时间片和所属的核作为新分配方案。
其中,在最小线程队列的长度与线程总数和核数目之间商不相等的条件下,若新时间片的数量为最长线程队列的长度,说明在执行完上述步骤1051至步骤1053的分配计算后,必定有剩余时间片未分配线程,为了加速推进线程的运行,可以将每个核中剩余未分配的时间片分配给核中优先级最高的线程。
步骤106:根据新分配方案,将全局就绪队列中的线程分配到相应核的就绪队列中,以按照新分配方案调度运行。
其中,根据新分配方案对每个核的线程进行调度,提高并行度,并减少同一时间运行的包含同一临界区的线程,避免临界区访问导致的串行化,从而使得线程快速结束任务。在调度过程中,对于线程运行表中已有的线程,若核的编号相同而时间片的顺序号不同,则按照新的时间片顺序号运行。若是核的编号不同,则需要将线程进行核间迁移,对于全局就绪队列中的线程直接分配到相应核的就绪队列中,并更新线程运行表、冲突线程表及线程队列即可,同时还需要将DAG图中对应节点的运行标志置为1。
需要说明的是,虽然初始分配方案的分配原则是各个核分配到的核数量尽量保持相同,但随着时间变化,分配给每个核的线程不断的运行,导致核内的运行线程数会不断减少,当不同核的结束运行的线程个数有差异时,负载就会出现差距,有的核处于空闲状态,这就导致核资源被浪费,如图6所示的一种各核负载记录表,核000的就绪队列中的所有线程已经运行完毕,处于空闲状态,因此负载情况为0,但是还有其他核的就绪队列中的线程在运行,此时各核负载是不均衡的。
基于此,可以每隔预设周期,根据所有核包含的线程总数与核数量的比值判定各个核的负载是否均衡。
其中,上述得到的比值表示平均分配后每个核应有的线程数。具体判定过程可以是:计算每个核现有线程数与平均分配数的差值的绝对值,并将其累加,若是所有核累加的数值大于一定的阈值,则确定各个核的负载不均衡,需要进行线程迁移。
在进行线程迁移时,将包含的线程数小于比值的核作为迁入核,将包含的线程数大于比值的核作为迁出核,然后将迁出核中的线程迁移至迁入核中,使得迁出核包含的线程数与所述比值之间差值处于预设范围内,并更新线程运行表和冲突线程表。即将线程从负载较重的核迁移至负载较轻的核,使得各核负载重新均衡。
在一些实施例中,在进行线程迁移过程中,可以优先选择有冲突的线程进行迁移,以加快推进线程运行,其次选择不包含临界区的线程进行迁移,最次再选择包含临界区的线程进行迁移。
线程迁移的具体实现过程包括:首先从迁出核包含的所有线程中选取在冲突线程表中有记录但要运行的临界区的线程队列中所有线程占用的时间片数量小于当前分段数的第一线程,从当前划分的时间片中,获取第一线程要运行的临界区的线程队列中所有线程未占用的其他时间片,在迁入核包含的线程中查找占用了该其他时间片的线程,若查找到的线程占用一个以上的时间片,则将第一线程从迁出核迁移至迁入核并将该其他时间片分配给第一线程;
如果执行完上述第一线程的迁移后,迁出核包含的线程数与上述得到的比值之间差值仍未处于预设范围内,表示各个核之间还未达到均衡,则从迁出核包含的所有线程中选取不包含临界区的第二线程,从迁入核包含的线程中查找占用时间片数量最多的线程,将查找到的线程占用的其中一个时间片分配给第二线程,并将第二线程从迁出核迁移至迁入核;
如果执行完上述第二线程的迁移后,迁出核包含的线程数与上述得到的比值之间差值还未处于预设范围内,表示各个核之间还未达到均衡,则从迁出核包含的所有线程中选取在冲突线程表中没有冲突的第三线程,若第三线程要运行的临界区的线程队列中所有线程占用的时间片数量等于当前分段数,从迁入核包含的线程中查找占用第三线程当前占用的时间片的线程,若查找到的线程占用的时间片数量大于1,则将第三线程从迁出核迁移至迁入核且第三线程占用的时间片不变;若第三线程要运行的临界区的线程队列中所有线程占用的时间片数量小于当前分段数,则从当前划分的时间片中获取第三线程要运行的临界区的线程队列中所有线程未占用的剩余时间片,并从迁入核包含的线程中查找占用剩余时间片的线程,若查找到的线程占用的时间片数量大于1,则将第三线程从迁出核迁移至迁入核,并将该线程占用的剩余时间片分配给第三线程。
需要说明的是,对于每一个迁出核,如果该核包含的线程数与上述得到的比值之间差值处于预设范围内时,即不再进行线程迁出,迁入核同理。另外,若出现上述三种迁出过程均执行完毕,迁出核包含的线程数与所述比值之间差值仍未处于预设范围内,则结束当前迁移流程,即强行停止。
需要进一步说明的是,上述步骤102中涉及到的,在线程执行一个临界区后,如果该线程所属核与即将执行的新临界区的线程队列中的其他线程所属核不同,可以根据该线程的属性采用上述不在冲突线程表中的属性及包含临界区的属性进行迁移。
至此,完成上述图1所示的方法流程,通过建立线程运行表、同一时间片运行同一临界区的冲突线程表及包含相同临界区的线程队列,以实时监控各个核的线程运行情况,在利用所有核的要运行的线程总数与当前时间片分段数量计算得到的线程并行度小于阈值时,为了提高系统效率,根据实时更新的线程运行表、冲突线程表及线程队列为待分配线程分配核和时间片,以避免多个线程同时访问临界区的问题,进而得到新的分配方案,并根据新的分配方案调度运行,达到提高系统效率的目的。
图7为本发明根据一示例性实施例示出的一种计算机设备的硬件结构图,该计算机设备包括:通信接口701、处理器702、机器可读存储介质703和总线704;其中,通信接口701、处理器702和机器可读存储介质703通过总线704完成相互间的通信。处理器702通过读取并执行机器可读存储介质703中与多核系统中多线程调度方法的控制逻辑对应的机器可执行指令,可执行上文描述的多核系统中多线程调度方法,该方法的具体内容参见上述实施例,此处不再累述。
本发明中提到的机器可读存储介质703可以是任何电子、磁性、光学或其它物理存储装置,可以包含或存储信息,如可执行指令、数据,等等。例如,机器可读存储介质可以是:易失存储器、非易失性存储器或者类似的存储介质。具体地,机器可读存储介质703可以是RAM(Radom Access Memory,随机存取存储器)、闪存、存储驱动器(如硬盘驱动器)、任何类型的存储盘(如光盘、DVD等),或者类似的存储介质,或者它们的组合。
与前述多核系统中多线程调度方法的实施例相对应,本发明还提供了多核系统中多线程调度装置的实施例。
图8为本发明根据一示例性实施例示出的一种多核系统中多线程调度装置的实施例流程图,该多核系统中多线程调度装置可以应用到计算机设备上,如图8所示,该多核系统中多线程调度装置包括:
线程组织模块810,用于根据各线程的前后依赖关系建立有向无环图DAG图;在所述DAG有更新时,检测所述DAG图的入节点并将入节点的线程添加到全局就绪队列;
线程监控模块820,用于根据各个核的就绪队列中的线程创建线程运行表、同一时间片运行同一临界区的冲突线程表及包含相同临界区的线程队列,并根据各个核的就绪队列中线程的运行变化,更新线程运行表、冲突线程表、线程队列及DAG图;
计算模块830,用于根据线程运行表和冲突线程表统计所有时间片运行的线程个数,并利用线程个数和时间片数量计算多核系统的线程并行度;若所述线程并行度小于阈值,则根据线程运行表、冲突线程表及线程队列为全局就绪队列中的线程分配核和时间片,以得到新分配方案;
调度模块840,用于根据新分配方案,将全局就绪队列中的线程分配到相应核的就绪队列中,以按照新分配方案调度运行。
在一可选实现方式中,所述线程监控模块820,具体用于在根据各个核的就绪队列中线程的运行变化,更新线程运行表、冲突线程表、线程队列及DAG图过程中,当有线程运行完包含的一个临界区时,从该临界区的线程队列中删除该线程,检测该线程要运行的下一个临界区,并将该线程添加到下一个临界区的线程队列中,并从下一个临界区的线程队列中的其他线程获取与该线程冲突的线程后更新到冲突线程表中;当有线程运行完时,该线程占用的时间片空出,从该线程所属核包含的其他线程中选取优先级最高的线程,并将空出的时间片分配给优先级最高的线程,并在线程运行表中更新优先级最高的线程占用的时间片,若优先级最高的线程有新的线程冲突产生,则更新到冲突线程表中,同时将该线程从线程运行表、冲突线程表、线程队列及DAG图中删除。
在一可选实现方式中,所述计算模块830,具体用于在利用线程个数和时间片数量计算多核系统的线程并行度过程中,将所述线程个数除以所述时间片数量,得到每个时间片上要运行的平均线程数,将该平均线程数作为线程并行度。
在一可选实现方式中,所述计算模块830,具体用于在根据线程运行表、冲突线程表及线程队列为全局就绪队列中的线程分配核和时间片,以得到新分配方案的过程中,从线程运行表和全局就绪队列包含的线程总数与核的数目之间的商与最长线程队列的长度中选取最大值作为新时间片的数量;按照预设规则将线程运行表中记录的各个线程占用的时间片和所属核的信息复制到一个新建的表中;针对全局就绪队列中的每个线程,将该线程加到该线程要运行的第一个临界区的线程队列中,并从新时间片中选取一个该线程队列中其他线程未占用的时间片分配给该线程,再选取一个核分配给该线程,所选取的核包含的该时间片还未分配线程,将该线程和分配的核和时间片添加到新建的表中;若新时间片的数量为最长线程队列的长度,则将每个核中剩余未分配的时间片分配给核中优先级最高的线程,并更新新建的表中记录的优先级最高的线程占用的时间片,进而得到的新建的表中记录的各个线程占用的时间片和所属的核作为新分配方案。
在一可选实现方式中,所述计算模块830,具体用于在按照预设规则将线程运行表中记录的各个线程占用的时间片和所属核的信息复制到一个新建的表中过程中,针对线程运行表中记录的占用一个时间片的线程,若该时间片属于新时间片,则将该线程对应的对应的时间片和所属核的信息完全复制到新建的表中,否则,将该线程添加到全局就绪队列中,以等待之后进行分配;针对线程运行表中记录的占用一个以上时间片的线程,若该线程在冲突线程表中有记录,则从占用的一个以上时间片中,选取一个属于新的时间片且与冲突线程占用的时间片不同的时间片,并将选取的时间片、该线程及所属核的信息复制到新建的表中,并更新冲突线程表。
在一可选实现方式中,所述计算模块830,具体用于在选取一个核分配给该线程过程中,从该线程要运行的第一个临界区的线程队列中其他线程所属的核中,选取一个该时间片未分配线程的核分配给该线程;若其他线程所属的核包含的该时间片均分配了线程,则再从其他的核中,选取一个该时间片未分配线程的核分配给该线程。
在一可选实现方式中,所述装置还包括(图8中未示出):
线程迁移模块,用于每隔预设周期,根据所有核包含的线程总数与核数量的比值判定各个核的负载是否均衡;若不均衡,则将包含的线程数小于比值的核作为迁入核,将包含的线程数大于比值的核作为迁出核;将迁出核中的线程迁移至迁入核中,使得迁出核包含的线程数与所述比值之间差值处于预设范围内,并更新线程运行表和冲突线程表。
在一可选实现方式中,所述线程迁移模块,具体用于在将迁出核中的线程迁移至迁入核中,使得迁出核包含的线程数与所述比值之间差值处于预设范围内的过程中,从迁出核包含的所有线程中选取在冲突线程表中有记录但要运行的临界区的线程队列中所有线程占用的时间片数量小于当前分段数的第一线程,从当前划分的时间片中,获取第一线程要运行的临界区的线程队列中所有线程未占用的其他时间片,在迁入核包含的线程中查找占用了该其他时间片的线程,若查找到的线程占用一个以上的时间片,则将第一线程从迁出核迁移至迁入核并将该其他时间片分配给第一线程;若迁出核包含的线程数与所述比值之间差值未处于预设范围内,则从迁出核包含的所有线程中选取不包含临界区的第二线程,从迁入核包含的线程中查找占用时间片数量最多的线程,将查找到的线程占用的其中一个时间片分配给第二线程,并将第二线程从迁出核迁移至迁入核;若迁出核包含的线程数与所述比值之间差值仍未处于预设范围内,则从迁出核包含的所有线程中选取在冲突线程表中没有记录的第三线程,若第三线程要运行的临界区的线程队列中所有线程占用的时间片数量等于当前分段数,从迁入核包含的线程中查找占用第三线程当前占用的时间片的线程,若查找到的线程占用的时间片数量大于1,则将第三线程从迁出核迁移至迁入核且第三线程占用的时间片不变;若第三线程要运行的临界区的线程队列中所有线程占用的时间片数量小于当前分段数,则从当前划分的时间片中获取第三线程要运行的临界区的线程队列中所有线程未占用的剩余时间片,并从迁入核包含的线程中查找占用剩余时间片的线程,若查找到的线程占用的时间片数量大于1,则将第三线程从迁出核迁移至迁入核,并将该线程占用的剩余时间片分配给第三线程;若迁出核包含的线程数与所述比值之间差值仍未处于预设范围内,则结束当前迁移流程。
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本发明方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本发明旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本发明未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由下面的权利要求指出。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。