CN111338803B - 一种线程处理方法和装置 - Google Patents
一种线程处理方法和装置 Download PDFInfo
- Publication number
- CN111338803B CN111338803B CN202010182394.2A CN202010182394A CN111338803B CN 111338803 B CN111338803 B CN 111338803B CN 202010182394 A CN202010182394 A CN 202010182394A CN 111338803 B CN111338803 B CN 111338803B
- Authority
- CN
- China
- Prior art keywords
- thread
- cpu
- target process
- determining
- threads
- 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
- 238000003672 processing method Methods 0.000 title description 18
- 238000000034 method Methods 0.000 claims abstract description 173
- 230000008569 process Effects 0.000 claims abstract description 143
- 230000000977 initiatory effect Effects 0.000 claims description 3
- 230000006870 function Effects 0.000 description 4
- 238000004590 computer program Methods 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 230000000903 blocking effect Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/505—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the load
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5018—Thread allocation
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
本公开提供了一种线程处理方法、装置、电子设备及存储介质,该方法先使所述目标进程保持预定义负载运行,并根据CPU占用率确定繁忙线程池,再调整繁忙线程池中的线程数量以及其他线程池中的线程数量,使所有线程的数量之和与CPU逻辑核的数量相等,并使不同线程池之间的CPU占用率相近,最后将单个线程与单个CPU逻辑核建立一一对应关系,使任一CPU逻辑核只运行对应的线程。本方法可有效对多线程池场景的线程进行调度,使单个CPU逻辑核只处理单一线程且平均控制每个线程的负载,避免CPU频繁切换处理线程造成的延迟抖动。
Description
技术领域
本公开涉及计算机技术领域,尤其涉及一种线程处理方法、装置、电子设备及存储介质。
背景技术
线程切换和线程调度,是高性能服务器场景下的重要组成部分。若线程数量过多,CPU需要经常切换运行各个线程,而切换过程需要消耗CPU资源,若线程数量过少,则每个线程可能过于繁忙。如何选择合适的线程数量,如何有效降低线程切换频率,是业界一直关注的问题。
传统方案通常只针对单一线程池的进行调度,使单一线程池的工作线程数量与CPU逻辑核数量相等,无法应对具有多个线程池的复杂情况。
发明内容
针对上述技术问题,本公开实施例提供一种线程处理方法,技术方案如下:
根据本公开实施例的第一方面,提供一种线程处理方法,包括:
确定目标进程,并使所述目标进程运行时保持预定义负载;
确定所述目标进程中不同线程池的CPU占用率,根据所述CPU占用率确定繁忙线程池;
增加繁忙线程池中的线程数量,并对应调整其他线程池的线程数量,使所述目标进程的所有线程的数量之和与CPU逻辑核的数量相等,并使不同线程池之间的CPU占用率差值小于预设阈值;
将单个线程与单个CPU逻辑核建立一一对应关系,使任一CPU逻辑核只运行对应的线程。
可选的,所述确定目标进程,并使所述目标进程运行时保持预定义负载之前,还包括:
获取为每个线程池预先设定的不同线程标识,所述线程池标识用于区分不同线程池。
可选的,所述确定目标进程,并使所述目标进程运行时保持预定义负载,包括:
确定目标进程并生成预定数量的请求消息,通过使所述进程处理所述预定数量的请求消息,使所述目标进程保持运行时保持预定义负载。
可选的,所述确定所述目标进程中不同线程池的CPU占用率,根据所述CPU占用率确定繁忙线程池,包括:
确定所述进程中包括的各个线程池;
针对任一线程池,确定其中所包含的各个线程的CPU占用率的平均值,将所述平均值最高的线程池确定为繁忙线程池。
可选的,所述将单个线程与单个CPU逻辑核建立一一对应关系,包括:
将单个线程与单个CPU逻辑核建立一一对应关系,其中,同一线程池的各个线程优先与同一CPU的逻辑核建立关系。
可选的,所述将单个线程与单个CPU逻辑核建立一一对应关系,使任一CPU逻辑核只运行对应的线程,包括:
通过指定系统接口,将每个线程对应绑定在一个CPU逻辑核上,使任一CPU逻辑核只运行对应绑定的线程。
根据本公开实施例的第二方面,提供一种线程处理装置,包括:
进程启动模块,被配置为确定目标进程,并使所述目标进程运行时保持预定义负载;
繁忙线程池确定模块,被配置为确定所述目标进程中不同线程池的CPU占用率,根据所述CPU占用率确定繁忙线程池;
线程数量调整模块,被配置为增加繁忙线程池中的线程数量,并对应调整其他线程池的线程数量,使所述目标进程的所有线程的数量之和与CPU逻辑核的数量相等,并使不同线程池之间的CPU占用率差值小于预设阈值;
对应关系建立模块,被配置为将单个线程与单个CPU逻辑核建立一一对应关系,使任一CPU逻辑核只运行对应的线程。
可选的,所述进程启动模块,在确定目标进程,并使所述目标进程运行时保持预定义负载之前,还被配置为:
获取为每个线程池预先设定的不同线程标识,所述线程池标识用于区分不同线程池。
可选的,所述进程启动模块,在确定目标进程,并使所述目标进程运行时保持预定义负载,被配置为:
确定目标进程并生成预定数量的请求消息,通过使所述进程处理所述预定数量的请求消息,使所述目标进程运行时保持预定义负载。
可选的,所述繁忙线程池确定模块,在确定所述目标进程中不同线程池的CPU占用率,根据所述CPU占用率确定繁忙线程池时,被配置为:
确定所述进程中包括的各个线程池;
针对任一线程池,确定其中所包含的各个线程的CPU占用率的平均值,将所述平均值最高的线程池确定为繁忙线程池。
可选的,所述对应关系建立模块,在将单个线程与单个CPU逻辑核建立一一对应关系时,被配置为:
将单个线程与单个CPU逻辑核建立一一对应关系,其中,同一线程池的各个线程优先与同一CPU的逻辑核建立关系。
可选的,所述对应关系建立模块,在将单个线程与单个CPU逻辑核建立一一对应关系,使任一CPU逻辑核只运行对应的线程时,被配置为:
通过指定系统接口,将每个线程对应绑定在一个CPU逻辑核上,使任一CPU逻辑核只运行对应绑定的线程。
根据本公开实施例的第三方面,提供一种线程处理电子设备,包括:处理器;用于存储所述处理器可执行指令的存储器;其中,所述处理器被配置为执行所述指令,以实现如第一方面所述的线程处理方法。
根据本公开实施例的第四方面,提供一种线程处理存储介质,当所述存储介质中的指令由线程处理电子设备的处理器执行时,使得线程处理电子设备能够执行如第一方面所述的线程处理方法。
本公开实施例提供了一种线程处理方法、装置、电子设备及存储介质。该方法先使所述目标进程运行时保持预定义负载,并根据CPU占用率确定繁忙线程池,再调整繁忙线程池中的线程数量以及其他线程池中的线程数量,使所有线程的数量之和与CPU逻辑核的数量相等,并使不同线程池之间的CPU占用率相近,最后将单个线程与单个CPU逻辑核建立一一对应关系,使任一CPU逻辑核只运行对应的线程。本方法可有效对多线程池场景的线程进行调度,使单个CPU逻辑核只处理单一线程且平均控制每个线程的负载,避免CPU频繁切换处理线程造成的延迟抖动。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开实施例。
此外,本公开实施例中的任一实施例并不需要达到上述的全部效果。
附图说明
为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开实施例中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1是本公开一示例性实施例示出的线程处理方法的一种流程图;
图2是本公开一示例性实施例示出的线程处理方法的另一种流程图;
图3是本公开一示例性实施例示出的线程处理方法的另一种流程图;
图4是本公开一示例性实施例示出的线程处理装置的一种示意图;
图5是本公开一示例性实施例示出的电子设备的一种示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
在本公开使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本公开。在本公开和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本公开可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本公开范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
线程切换和线程调度,是高性能服务器场景下的重要组成部分。若线程数量过多,CPU需要经常切换运行各个线程,而切换过程需要消耗CPU资源,若线程数量过少,则每个线程可能过于繁忙。如何选择合适的线程数量,如何有效降低Linux操作系统下的线程切换频率,是业界一直关注的问题。
传统方案通常只针对单一线程池的进行调度,使单一线程池的工作线程数量与CPU逻辑核数量相等,无法应对具有多个线程池的复杂情况。
针对以上问题,本公开提供了一种线程处理方法,以及应用所述线程处理方法的线程处理设备,首先对该线程处理方法进行说明。参见图1,包括以下步骤S101~步骤S104:
在步骤S101中,确定目标进程,并使所述目标进程保持运行时保持预定义负载;
在本公开一实施例中,执行步骤S101时,可以采用但不限于以下方式:
(1-1)确定目标进程;
(1-2)生成预定数量的请求消息;
(1-3)使所述进程持续处理所述预定数量的请求消息,以使所述目标运行时保持预定义负载。
另外,上述(1-1)至(1-3)的具体实现过程,可详见图2所示实施例。
在本公开一实施例中,执行步骤S101之前,还可以包括:
获取为每个线程池预先设定的不同线程标识,所述线程池标识用于区分不同线程池。
每个线程池可视为运行同一类的多个线程的集合,可通过具有相应功能的系统接口设置线程池的线程标识,以Linux系统为例,可通过Linux系统的prctl命令设置线程标识。
具体而言,该线程标识可为线程池的特定名称,举例说明:可通过修改代码将每一类线程池中的工作线程设置一个类型名字,如,可将一类线程设置为名称Worker_A,将另一类相乘设置为名称Worker_B,该不同类的线程集合即为上文提到的不同线程池。
设置线程标识是为了更好地区分线程池,在当前线程运行过程中,各个不同线程的默认名称并未作出区分,如果不为线程池设定线程标识,则后续识别繁忙线程池时可能造成不便。
在步骤S102中,确定所述目标进程中不同线程池的CPU占用率,根据所述CPU占用率确定繁忙线程池;
在一实施例中,执行步骤S102时,可以采用但不限于以下方式:
(2-1)确定所述进程中包括的各个线程池;
(2-2)针对任一线程池,确定其中所包含的各个线程的CPU占用率的平均值,将所述平均值最高的线程池确定为繁忙线程池。
本公开一实施例中,在步骤(2-1)中,所述进程包括的各个线程池可包括线程的
另外,上述(2-1)至(2-2)的具体实现过程,可详见图3所示实施例。
在步骤S103中,增加繁忙线程池中的线程数量,并对应调整其他线程池的线程数量,使所述目标进程的所有线程的数量之和与CPU逻辑核的数量相等,并使不同线程池之间的CPU占用率差值小于预设阈值;
可以知道,每个进程可以有多个线程,这多个线程包括不同种类的线程,将其中的同类线程视为处于同一线程池的线程。
在同一线程池中,各个线程执行同一工作或相似工作,其中的各个线程的CPU占用率较为接近。当一个线程池为繁忙线程池时,说明该线程池承担的工作量较大,当为该繁忙线程池增加一定数量的线程后,新增加的线程会承担一部分原有线程的工作量,则该线程池的每个线程的CPU占用率都会相应降低。
增加繁忙线程池中的线程数量后,可能需要对应调整其他线程池的线程数量,也可能不需要调整。其他线程池即该目标进程中,除了繁忙线程池以外的线程池。其他线程池的具体调整策略如下:
a)若增加繁忙线程池中的线程数量后,目标进程的总线程数量小于CPU逻辑核的数量,则需要对应调整繁忙线程池和/或非繁忙线程池的线程数量,使目标进程的所有线程的数量之和等于CPU逻辑核的数量;
b)若增加繁忙线程池中的线程数量后,目标进程的总线程数量等于CPU逻辑核的数量,则不需要对应调整其他线程池的线程数量;
c)若增加繁忙线程池中的线程数量后,目标进程的总线程数量大于CPU逻辑核的数量,则需要对应减少其他线程池的线程数量,使目标进程的所有线程的数量之和等于CPU逻辑核的数量。
在本公开一实施例中,可通过反复调整繁忙线程池中的线程数量,以及相应调整其他线程池的线程数量,使各个线程的CPU占用率趋向平均。即通过调整各个线程池的线程数量使目标进程中各个线程的CPU占用率相近。
举例说明:目标进程中包括线程池A以及线程池B,可以知道,由于同一线程池中各个线程执行同一工作或相似工作,各个线程的CPU占用率较为接近。线程池A为繁忙线程池,其中具有4个线程,每个线程的CPU占用率为12%左右;线程池B为非繁忙线程池,其中具有5个线程,每个线程的CPU占用率为6%左右。且系统中具有10个CPU逻辑核。
则在调整各个线程池中的线程数量时,可将线程池A调整为7个线程,将线程池B调整为3个线程。此时线程数量与CPU逻辑核的数量相等,每个CPU逻辑核可用于对应运行一个线程,不会浪费CPU逻辑核的处理资源。同时,由于线程池A的线程由4个增加到7个,原有4个线程所承担的工作被分担一部分到新增加的3个线程中,则该7个线程的CPU占用率被降低到8%左右。而线程池B的线程由5个减少到3个,原有5个线程所承担的工作由3个线程承担,则该3个线程的CPU占用率被增加到8%左右。可以看出,此时目标进程中各个线程的CPU占用率已经接近,将CPU的处理资源平均控制到每个线程上,避免出现部分线程占用CPU过多出现的卡顿问题。
在步骤S104中,将单个线程与单个CPU逻辑核建立一一对应关系,使任一CPU逻辑核只运行对应的线程。
首先对CPU的逻辑核进行介绍,在CPU中,逻辑核是通过对物理核进行超线程模虚拟而成的。物理核:硬件层面的CPU核,是CPU里封装的物理硬件;逻辑核:利用超线程技术模拟出来的核,一般来说一个物理核可以虚拟出2个,也可称为逻辑CPU数;超线程:HT,Hyper-Threading,超线程技术就是让一个物理核模拟出两个逻辑核的技术。
在实际应用中,线程需要CPU核来运行,每个CPU核在同一时间只能运行一条线程,这里的CPU核指的是逻辑核。因此,当线程数量高于CPU逻辑核的数量时,为保证所有线程都被执行,CPU逻辑核需要频繁切换自身所运行的线程,造成额外的资源消耗,且容易发生延迟抖动。当线程数量低于CPU逻辑核的数量时,可能发生单个线程负载过高,CPU占用率过高的问题。本步骤将单个线程与单个CPU逻辑核建立一一对应关系,使任一CPU逻辑核只运行对应的线程,具体而言,在将单个线程与单个CPU逻辑核建立一一对应关系时,可通过指定系统接口,将每个线程对应绑定在一个CPU逻辑核上,使任一CPU逻辑核只运行对应绑定的线程,以Linux系统为例,可通过Linux系统的亲和性接口对线程和CPU逻辑核进行绑定,如此可避免CPU逻辑核频繁切换自身所运行的线程。
需要注意的是,本步骤之所以可以将单个线程与单个CPU逻辑核建立一一对应关系,是因为前述步骤中已经调整过线程的数量,使多个线程池所包含的总的线程数量之和等于CPU逻辑核的数量。
在本公开一实施例中,将单个线程与单个CPU逻辑核建立一一对应关系时,同一线程池的各个线程需优先与同一CPU的逻辑核建立关系,以便最大程度利用该CPU的高速缓存。
图2是根据一示例性实施例示出的另一种内容推荐方法的流程图,该内容推荐方法可以用于能够执行内容推荐的平台上,并建立在图1所示方法的基础上,如图2所示,在执行步骤S101时,可以包括以下步骤S201-S203:
在步骤S201中,确定目标进程;
在步骤S202中,生成预定数量的请求消息;
在步骤S203中,使所述进程持续处理所述预定数量的请求消息,以保持所述目标进程运行时保持预定义负载。
在本实施例中,目标进程为需要进行线程调优的进程,本实施例针对的是单一进程中具有一个或多个线程池的场景。针对不同的进程,需要分别执行本说明书提供的线程处理流程,实现线程的优化调度。
在本公开一实施例中,预定义负载通常为较高负载,具体而言,首先启动该需要进行线程调优的目标进程,并为该进程提供一个较高的负载,以使目标进程中的各个线程处于工作状态,且部分线程处于繁忙状态,此时的线程数量,和线程繁忙状态是CPU自动进行线程调度后的默认结果。
保持所述目标进程在预定义负载运行,可以识别在进程繁忙情况下,其中的哪一类或哪几类线程会进入繁忙状态,便于后续对应进行线程平衡(增加这一类或这几类线程的数量)。可以知道,若该目标进程处于未达到预定义负载,如只保持低负载运行状态,则该进程中的各个线程均会处于非繁忙状态,不便于后续调整线程数量。
具体而言,为了保持所述目标进程运行时保持预定义的较高负载,可为该目标进程生成一定数量的请求消息供目标进程处理,该请求消息的具体生成数量可根据实际应用场景进行确定。举例说明:若处理系统具有多个CPU,每个CPU具有多个逻辑核,处理功能较强,则可对应生成较多的请求消息;若处理系统具有单个CPU,每个CPU具少量逻辑核,处理功能较弱,则可对应生成较少的请求消息。
图3是根据一示例性实施例示出的另一种内容推荐方法的流程图,该内容推荐方法可以用于能够执行内容推荐的平台上,并建立在图1所示方法的基础上,如图3所示,在执行步骤S102时,可以包括以下步骤S301-S302:
在步骤S301中,确定所述进程中包括的各个线程池;
在步骤S302中,针对任一线程池,确定其中所包含的各个线程的CPU占用率的平均值,将所述平均值最高的线程池确定为繁忙线程池。
可以知道,进程是操作系统层面的内容,线程是CPU层面的内容,CPU执行的是线程而非进程,而这些线程共享同一份进程的资源。因此,每个进程可以有多个线程,这多个线程包括不同种类的线程,将其中的同类线程视为处于同一线程池的线程。
在进程处于预定义的高负载状态时,其中包括的多个线程也会进入相对繁忙的工作状态。在确定繁忙线程池时,可将该线程池中各个线程的CPU占用率进行平均计算,计算出该线程池的CPU占用率平均值,将该目标进程中的所有线程池的CPU占用率平均值计算出来后,将其中平均值最高的线程池确定为繁忙线程池,计算线程CPU占用率平均值最高的线程池可以较为较为简便的确定出繁忙线程池。
在本公开一实施例中,同一个线程池中的各个线程由于工作相似,其CPU占用率也会比较相近。因此,也可不进行计算,直接通过人工观察,将CPU占用率较高的一类线程的线程池确定为繁忙线程池。
具体而言,以Linux系统为例,可通过Linux系统的top-p pid-H命令显示目标进程的不同线程的当前CPU占用情况,通过机器计算或人工观察不同线程的CPU占用率,确定繁忙线程池。
在本公开一实施例中,繁忙线程池可以只有一个,也可以具有多个。当繁忙线程池的数量过多,或全部线程池均处于繁忙状态时,可能是为进程提供的负载过高。可适当降低进程的负载,并重新开始本公开提供的流程。
可以看出,本公开提供了一种线程处理方法、装置、电子设备及存储介质,该方法先使所述目标进程保持预定义负载运行,并根据CPU占用率确定繁忙线程池,再调整繁忙线程池中的线程数量以及其他线程池中的线程数量,使所有线程的数量之和与CPU逻辑核的数量相等,并使不同线程池之间的CPU占用率相近,最后将单个线程与单个CPU逻辑核建立一一对应关系,使任一CPU逻辑核只运行对应的线程。本方法可有效对多线程池场景的线程进行调度,使单个CPU逻辑核只处理单一线程且平均控制每个线程的负载,避免CPU频繁切换处理线程造成的延迟抖动。
相应于上述方法实施例,本公开实施例还提供一种线程处理装置,参见图4所示,所述装置可以包括:进程启动模块410、繁忙线程池确定模块420、线程数量调整模块430和对应关系建立模块440。
进程启动模块410,被配置为确定目标进程,并使所述目标进程运行时保持预定义负载;
繁忙线程池确定模块420,被配置为确定所述目标进程中不同线程池的CPU占用率,根据所述CPU占用率确定繁忙线程池;
线程数量调整模块430,被配置为增加繁忙线程池中的线程数量,并对应调整其他线程池的线程数量,使所述目标进程的所有线程的数量之和与CPU逻辑核的数量相等,并使不同线程池之间的CPU占用率差值小于预设阈值;
对应关系建立模块440,被配置为将单个线程与单个CPU逻辑核建立一一对应关系,使任一CPU逻辑核只运行对应的线程。
可选的,所述进程启动模块,在确定目标进程,并使所述目标进程运行时保持预定义负载之前,还被配置为:
获取为每个线程池预先设定的不同线程标识,所述线程池标识用于区分不同线程池。
可选的,所述进程启动模块,在确定目标进程,并使所述目标进程运行时保持预定义负载,被配置为:
确定目标进程并生成预定数量的请求消息,通过使所述进程处理所述预定数量的请求消息,使所述目标进程运行时保持预定义负载。
可选的,所述繁忙线程池确定模块,在确定所述目标进程中不同线程池的CPU占用率,根据所述CPU占用率确定繁忙线程池时,被配置为:
确定所述进程中包括的各个线程池;
针对任一线程池,确定其中所包含的各个线程的CPU占用率的平均值,将所述平均值最高的线程池确定为繁忙线程池。
可选的,所述对应关系建立模块,在将单个线程与单个CPU逻辑核建立一一对应关系时,被配置为:
将单个线程与单个CPU逻辑核建立一一对应关系,其中,同一线程池的各个线程优先与同一CPU的逻辑核建立关系。
可选的,所述对应关系建立模块,在将单个线程与单个CPU逻辑核建立一一对应关系,使任一CPU逻辑核只运行对应的线程时,被配置为:
通过指定系统接口,将每个线程对应绑定在一个CPU逻辑核上,使任一CPU逻辑核只运行对应绑定的线程。
本公开实施例还提供一种电子设备,其至少包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,处理器执行所述程序时实现前述线程处理方法,所述方法包括:
确定目标进程,并使所述目标进程运行时保持预定义负载;
确定所述目标进程中不同线程池的CPU占用率,根据所述CPU占用率确定繁忙线程池;
增加繁忙线程池中的线程数量,并对应调整其他线程池的线程数量,使所述目标进程的所有线程的数量之和与CPU逻辑核的数量相等,并使不同线程池之间的CPU占用率差值小于预设阈值;
将单个线程与单个CPU逻辑核建立一一对应关系,使任一CPU逻辑核只运行对应的线程。
图5示出了根据本公开的一示例性实施例的基于主设备侧电子设备的示意结构图。请参考图5,在硬件层面,该电子设备包括处理器502、内部总线504、网络接口506、内存504以及非易失性存储器510,当然还可能包括其他业务所需要的硬件。处理器502从非易失性存储器510中读取对应的计算机程序到内存502中然后运行,在逻辑层面上形成执行线程处理方法的装置。当然,除了软件实现方式之外,本公开并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
本公开实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现前述的线程处理方法,所述方法包括:
确定目标进程,并使所述目标进程运行时保持预定义负载;
确定所述目标进程中不同线程池的CPU占用率,根据所述CPU占用率确定繁忙线程池;
增加繁忙线程池中的线程数量,并对应调整其他线程池的线程数量,使所述目标进程的所有线程的数量之和与CPU逻辑核的数量相等,并使不同线程池之间的CPU占用率差值小于预设阈值;
将单个线程与单个CPU逻辑核建立一一对应关系,使任一CPU逻辑核只运行对应的线程。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁存储设备存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本公开方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
以上所述仅是本公开实施例的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本公开实施例原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本公开实施例的保护范围。
Claims (12)
1.一种线程处理方法,其特征在于,包括:
确定目标进程,并使所述目标进程运行时保持预定义负载;
确定所述目标进程中不同线程池的CPU占用率,根据所述CPU占用率确定繁忙线程池;
增加繁忙线程池中的线程数量,并对应调整其他线程池的线程数量,使所述目标进程的所有线程的数量之和与CPU逻辑核的数量相等,并使不同线程池之间的CPU占用率差值小于预设阈值;
将单个线程与单个CPU逻辑核建立一一对应关系,使任一CPU逻辑核只运行对应的线程;其中,同一线程池的各个线程优先与同一CPU的逻辑核建立关系。
2.如权利要求1所述的方法,其特征在于,所述确定目标进程,并使所述目标进程运行时保持预定义负载之前,还包括:
获取为每个线程池预先设定的线程池标识,所述线程池标识用于区分不同线程池。
3.如权利要求1所述的方法,其特征在于,所述确定目标进程,并使所述目标进程运行时保持预定义负载,包括:
确定目标进程并生成预定数量的请求消息,通过使所述进程处理所述预定数量的请求消息,使所述目标进程运行时保持预定义负载。
4.如权利要求1所述的方法,其特征在于,所述确定所述目标进程中不同线程池的CPU占用率,根据所述CPU占用率确定繁忙线程池,包括:
确定所述进程中包括的各个线程池;
针对任一线程池,确定其中所包含的各个线程的CPU占用率的平均值,将所述平均值最高的线程池确定为繁忙线程池。
5.如权利要求1所述的方法,其特征在于,所述将单个线程与单个CPU逻辑核建立一一对应关系,使任一CPU逻辑核只运行对应的线程,包括:
通过指定系统接口,将每个线程对应绑定在一个CPU逻辑核上,使任一CPU逻辑核只运行对应绑定的线程。
6.一种线程处理装置,其特征在于,包括:
进程启动模块,被配置为确定目标进程,并使所述目标进程运行时保持预定义负载;
繁忙线程池确定模块,被配置为确定所述目标进程中不同线程池的CPU占用率,根据所述CPU占用率确定繁忙线程池;
线程数量调整模块,被配置为增加繁忙线程池中的线程数量,并对应调整其他线程池的线程数量,使所述目标进程的所有线程的数量之和与CPU逻辑核的数量相等,并使不同线程池之间的CPU占用率差值小于预设阈值;
对应关系建立模块,被配置为将单个线程与单个CPU逻辑核建立一一对应关系,使任一CPU逻辑核只运行对应的线程;其中,同一线程池的各个线程优先与同一CPU的逻辑核建立关系。
7.如权利要求6所述的装置,其特征在于,所述进程启动模块,在确定目标进程,并使所述目标进程运行时保持预定义负载之前,还被配置为:
获取为每个线程池预先设定的不同线程标识,所述线程池标识用于区分不同线程池。
8.如权利要求6所述的装置,其特征在于,所述进程启动模块,在确定目标进程,并使所述目标进程运行时保持预定义负载,被配置为:
确定目标进程并生成预定数量的请求消息,通过使所述进程处理所述预定数量的请求消息,使所述目标进程运行时保持预定义负载。
9.如权利要求6所述的装置,其特征在于,所述繁忙线程池确定模块,在确定所述目标进程中不同线程池的CPU占用率,根据所述CPU占用率确定繁忙线程池时,被配置为:
确定所述进程中包括的各个线程池;
针对任一线程池,确定其中所包含的各个线程的CPU占用率的平均值,将所述平均值最高的线程池确定为繁忙线程池。
10.如权利要求6所述的装置,其特征在于,所述对应关系建立模块,在将单个线程与单个CPU逻辑核建立一一对应关系,使任一CPU逻辑核只运行对应的线程时,被配置为:
通过指定系统接口,将每个线程对应绑定在一个CPU逻辑核上,使任一CPU逻辑核只运行对应绑定的线程。
11.一种电子设备,其特征在于,包括:处理器;用于存储所述处理器可执行指令的存储器;其中,所述处理器被配置为执行所述指令,以实现如权利要求1至5中任一项所述的方法。
12.一种存储介质,其特征在于,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行如权利要求1至5中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010182394.2A CN111338803B (zh) | 2020-03-16 | 2020-03-16 | 一种线程处理方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010182394.2A CN111338803B (zh) | 2020-03-16 | 2020-03-16 | 一种线程处理方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111338803A CN111338803A (zh) | 2020-06-26 |
CN111338803B true CN111338803B (zh) | 2024-01-09 |
Family
ID=71184276
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010182394.2A Active CN111338803B (zh) | 2020-03-16 | 2020-03-16 | 一种线程处理方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111338803B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113238861A (zh) * | 2021-05-08 | 2021-08-10 | 北京天空卫士网络安全技术有限公司 | 一种任务执行方法和装置 |
CN114579303B (zh) * | 2022-02-25 | 2024-08-30 | 浪潮工业互联网股份有限公司 | 一种工业互联网的业务数据处理方法、设备及介质 |
CN117311994B (zh) * | 2023-11-28 | 2024-02-23 | 苏州元脑智能科技有限公司 | 一种处理核心隔离方法、装置及电子设备和存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102360310A (zh) * | 2011-09-28 | 2012-02-22 | 中国电子科技集团公司第二十八研究所 | 一种分布式系统环境下的多任务进程监视方法和监视系统 |
CN106716367A (zh) * | 2014-09-25 | 2017-05-24 | 甲骨文国际公司 | 用于支持分布式数据网格中的动态线程池大小确定的系统和方法 |
CN107450978A (zh) * | 2016-05-31 | 2017-12-08 | 北京京东尚科信息技术有限公司 | 分布式系统的线程管理方法和装置 |
CN109271252A (zh) * | 2018-08-29 | 2019-01-25 | 华为技术有限公司 | 一种调整线程数的方法及装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7526661B2 (en) * | 2004-12-02 | 2009-04-28 | Intel Corporation | Performance state-based thread management |
US9043801B2 (en) * | 2008-01-15 | 2015-05-26 | International Business Machines Corporation | Two-tiered dynamic load balancing using sets of distributed thread pools |
-
2020
- 2020-03-16 CN CN202010182394.2A patent/CN111338803B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102360310A (zh) * | 2011-09-28 | 2012-02-22 | 中国电子科技集团公司第二十八研究所 | 一种分布式系统环境下的多任务进程监视方法和监视系统 |
CN106716367A (zh) * | 2014-09-25 | 2017-05-24 | 甲骨文国际公司 | 用于支持分布式数据网格中的动态线程池大小确定的系统和方法 |
CN107450978A (zh) * | 2016-05-31 | 2017-12-08 | 北京京东尚科信息技术有限公司 | 分布式系统的线程管理方法和装置 |
CN109271252A (zh) * | 2018-08-29 | 2019-01-25 | 华为技术有限公司 | 一种调整线程数的方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN111338803A (zh) | 2020-06-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111338803B (zh) | 一种线程处理方法和装置 | |
CN111104208B (zh) | 进程调度管理方法、装置、计算机设备及存储介质 | |
WO2017206852A1 (zh) | 处理器计算资源的分配方法、装置及终端 | |
CN107577523B (zh) | 一种任务执行的方法及装置 | |
CN112929408A (zh) | 动态负载均衡方法及装置 | |
CN106897299B (zh) | 一种数据库访问方法及装置 | |
CN111708642B (zh) | Vr系统中处理器性能优化方法、装置及vr设备 | |
CN115190078B (zh) | 一种访问流量控制方法、装置、设备以及存储介质 | |
US10248321B1 (en) | Simulating multiple lower importance levels by actively feeding processes to a low-memory manager | |
CN116382880A (zh) | 任务执行方法、装置、处理器、电子设备及存储介质 | |
CN115269118A (zh) | 一种虚拟机的调度方法、装置及设备 | |
CN106775975B (zh) | 进程调度方法及装置 | |
CN112559176B (zh) | 一种指令处理方法和装置 | |
CN111143063B (zh) | 任务的资源预约方法及装置 | |
CN111913792A (zh) | 一种业务处理方法和装置 | |
CN112148426A (zh) | 一种带宽分配方法及装置 | |
US9348667B2 (en) | Apparatus for managing application program and method therefor | |
CN114968482A (zh) | 无服务器处理方法、装置和网络设备 | |
CN114116220B (zh) | 一种gpu共享控制方法、gpu共享控制装置及存储介质 | |
CN115437781A (zh) | 一种gpu资源管理方法及系统 | |
CN108881367A (zh) | 一种业务请求处理方法、装置及设备 | |
CN113535378A (zh) | 一种资源调配方法、存储介质及终端设备 | |
CN111274576B (zh) | 智能合约运行环境的控制方法及系统、设备、介质 | |
CN109597689B (zh) | 一种分布式文件系统内存优化方法、装置、设备及介质 | |
US20240195878A1 (en) | Application migration method and apparatus, electronic device, and storage medium |
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 |