CN116841751B - 一种多任务线程池的策略配置方法、装置和存储介质 - Google Patents
一种多任务线程池的策略配置方法、装置和存储介质 Download PDFInfo
- Publication number
- CN116841751B CN116841751B CN202311108472.4A CN202311108472A CN116841751B CN 116841751 B CN116841751 B CN 116841751B CN 202311108472 A CN202311108472 A CN 202311108472A CN 116841751 B CN116841751 B CN 116841751B
- Authority
- CN
- China
- Prior art keywords
- task
- thread
- tasks
- thread pool
- pool
- 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 62
- 230000008569 process Effects 0.000 claims abstract description 36
- 238000013486 operation strategy Methods 0.000 claims abstract description 24
- 230000005012 migration Effects 0.000 claims description 35
- 238000013508 migration Methods 0.000 claims description 35
- 238000004422 calculation algorithm Methods 0.000 claims description 12
- 238000012163 sequencing technique Methods 0.000 claims description 12
- 230000000694 effects Effects 0.000 claims description 10
- 238000012544 monitoring process Methods 0.000 claims description 7
- 238000005457 optimization Methods 0.000 claims description 7
- 238000012545 processing Methods 0.000 claims description 7
- 238000004590 computer program Methods 0.000 claims description 4
- 230000006870 function Effects 0.000 claims description 4
- 239000007787 solid Substances 0.000 claims description 3
- 238000007726 management method Methods 0.000 description 11
- 230000006399 behavior Effects 0.000 description 5
- 208000033793 Neuroendocrine tumor of stomach Diseases 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 4
- 230000004044 response Effects 0.000 description 4
- 208000036506 well differentiated low or intermediate grade gastric neuroendocrine tumor Diseases 0.000 description 4
- 241001522296 Erithacus rubecula Species 0.000 description 3
- 230000001133 acceleration Effects 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 230000001427 coherent effect Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000004807 localization Effects 0.000 description 2
- 238000005259 measurement Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 238000013468 resource allocation Methods 0.000 description 2
- 238000000638 solvent extraction Methods 0.000 description 2
- 239000011800 void material Substances 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000006467 substitution reaction Methods 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
- 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/5083—Techniques for rebalancing the load in a distributed system
-
- 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/5011—Pool
-
- 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
-
- 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
本发明提出一种多任务线程池的策略配置方法、装置和存储介质,所述方法包括:在进程中定义一个或多个线程池对象,通过所述线程池对象与策略类之间的关联ID或关联名称,实现所述线程池对象与对应的所述策略类之间的关联;配置所述线程池的运行策略类,所述线程池策略类包括单线程模式、多线程模式;其中所述单线程模式的运行策略包括一个主线程,根据所述主线程处理线程池中的任务;所述多线程模式的运行策略包括根据吞吐量及延迟确定任务的分类,并根据所述分类为所述任务分配线程;所述进程池中调用资源的方式包括通过非一致性内存访问的方式调用系统资源。
Description
技术领域
本发明涉及计算机领域,具体涉及一种多任务线程池的策略配置方法、装置和存储介质。
背景技术
在现有技术中,通常存在单一的全局线程池实例。这意味着所有的任务都被提交给同一个线程池进行执行。这可能导致线程池的资源被过度竞争,从而影响任务的执行效率和系统的性能。对于线程池的配置往往比较受限。例如,线程池的线程数量、任务队列容量等参数可能无法根据实际需求进行灵活调整。这可能导致在不同工作负载下无法获得最佳性能,或者造成资源浪费和低效的任务调度。并且,可能缺乏支持任务顺序执行的模式和对任务分组的有效管理机制,这意味着无法保证特定任务的顺序执行,对于有序性要求较高的任务场景可能无法满足需求。所有任务都被混合在同一个线程池中执行,可能增加了锁冲突和线程间的竞争,降低了系统的并发性和任务处理的效率。
综上所述,相对于多任务线程池的重新设计,现有技术在线程池实例、配置灵活性、任务顺序执行和任务分组管理等方面可能存在限制和缺陷。重新设计的多任务线程池通过引入策略配置、顺序执行和任务分组等特性,能够更好地解决这些问题,并提供更高效、灵活和可配置的任务调度和线程管理机制。
发明内容
有鉴于此,本发明提供了一种多任务线程池的策略配置方法,包括:在进程中定义一个或多个线程池对象,通过所述线程池对象与策略类之间的关联ID或关联名称,实现所述线程池对象与对应的所述策略类之间的关联;
配置所述线程池的运行策略类,所述线程池策略类包括单线程执行模式、多线程执行模式;其中所述单线程执行模式的运行策略包括一个主线程,根据所述主线程处理线程池中的任务;
所述多线程执行模式的运行策略包括根据吞吐量及延迟确定任务的分类,并根据所述分类为所述任务分配线程;
在所述进程池中通过非一致性内存访问(NUMA)的方式调用系统资源。
特别地,所述单线程执行模式包括:在线程池中定义所有待执行的任务,通过启动函数或结束函数来控制任务的启动或终止;或者不断询问并处理线程池中需要执行的任务,直到线程池中所有任务均被执行完毕。。
根据吞吐量及延迟来确定任务的分类包括:根据如下公式计算所述任务分类执行的概率,
其中,表示执行该任务分类的线程数,/>表示该任务分类中每个线程的吞吐量;/>表示执行该任务分类时的加速比,/> 表示该任务分类的优先级,k 表示总任务数;表示求最小值的运算;/>表示所有任务分类的线程数;/>表示所有任务分类中每个线程的吞吐量;/>表示执行所有任务分类时的加速比;/>表示所有任务分类的优先级;
对于多个任务,分别计算其中每种任务的执行概率,对任务执行概率进行排序,对于当前任务,根据任务的执行概率排序列表,找到当前任务的位置,根据当前任务的位置,确定其所属的任务分类。
特别地,多线程执行模式的运行策略中,确定的所述任务的分类包括:全局任务、分组任务、顺序任务、分组顺序任务。
特别地,所述多线程执行模式的运行策略还包括:根据策略任务由高层的策略模块决定以何种方式加入任务,用于实现运行期多态的效果。
特别地,通过使用非一致性内存访问(NUMA)的方式调用系统资源包括:确定处理器节点和线程绑定关系;
根据系统的非一致性内存访问(NUMA)拓扑信息,确定每个处理器节点和对应的线程;
使用线程绑定策略将任务与特定的处理器节点绑定,根据NUMA节点分配内存,使得每个节点分配的内存尽可能位于本地节点,使用本地节点访问优先的策略,尽可能在本地节点上执行任务,减少对远程内存的访问;
当需要访问远程内存时,使用远程缓存、远程读取以降低延迟和带宽开销;其中,使用动态负载平衡算法监测任务和线程的负载情况,根据负载情况进行动态的任务调度和线程迁移。
特别地,根据负载情况进行动态的任务调度和线程迁移,包括对于每一个任务,通过等待时间或任务执行时间计算其当前负载;对于每个处理器节点,计算其与其他节点的负载差异及负载差异权重,根据所述负载差异的大小调整计算任务迁移到节点的概率,可以使用以下公式计算计算任务迁移到其他节点的概率,
其中,表示对于任务x和处理器节点y,计算将任务x迁移到处理器节点y的概率;/>表示节点y的负载差异权重,/>表示最大的负载差异权重,/>表示任务x的当前负载,/>表示最大的任务负载;
选择具有最高概率的目标处理器节点,以当前节点的负载超过阈值及迁移后的节点负载低于当前节点,作为任务迁移的触发条件进行线程迁移。
本发明还提出了一种多任务线程池的策略配置装置,包括:
线程池管理模块,用于在进程中定义一个或多个线程池对象,通过所述线程池对象与策略类之间的关联ID或关联名称,实现线程池对象与对应的所述策略类之间的关联,并控制任务的提交和执行;
策略配置模块,用于配置所述线程池的运行策略类,所述线程池策略类包括单线程执行模式、多线程执行模式;其中所述单线程执行模式的运行策略包括一个主线程,根据所述主线程处理线程池中的任务;
所述多线程执行模式的运行策略包括根据吞吐量及延迟确定任务的分类,并根据所述分类为所述任务分配线程;
资源调用模块,用于在所述进程池中通过使用非一致性内存访问(NUMA)的方式调用系统资源。
本发明还提出了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机可读存储介质为固态硬盘,上存储有基于多任务线程池的策略配置程序,所述程序包括以下内容:线程池管理模块,用于在进程中定义一个或多个线程池对象,通过线程池对象与策略类之间的关联ID或关联名称,实现线程池对象与对应的策略类之间的关联,并控制任务的提交和执行;
策略配置模块,用于配置所述线程池的运行策略类,包括单线程执行模式、多线程执行模式的设置和切换;其中所述单线程执行模式的运行策略包括一个主线程,根据所述主线程处理线程池中的任务;
所述多线程执行模式的运行策略包括根据吞吐量及延迟确定任务的分类,并根据所述分类为所述任务分配线程;
任务调度模块,根据吞吐量和延迟,确定任务的分类并分配线程执行,支持全局任务、分组任务、顺序任务和分组顺序任务的分类和调度。
资源管理模块:通过非一致性内存访问(NUMA)方式调用系统资源,包括确定处理器节点和线程绑定关系、动态负载平衡算法、远程内存访问优化;所述计算机程序被处理器执行时实现所述的多任务线程池的策略配置方法。
有益效果:
1、通过本发明实现了线程池对象的多实例化,以前的线程池通常是一个全局变量,所有任务都提交给同一个线程池进行执行;而重新设计后,允许在进程中存在多个线程池实例;这样可以根据具体需求和场景,为不同分类的任务或任务组配置独立的线程池,提高并发性和任务执行的效率。
2、通过本发明实现了通过引入策略对象,可以更灵活地配置线程池的行为。策略对象可以用于调整线程池的线程数量、任务队列容量、拒绝策略等参数,以适应不同的工作负载和系统需求,这样可以根据实际情况动态调整线程池的配置,提高系统的性能和资源利用率。
3、通过本发明实现了根据负载情况进行动态的任务调度和线程迁移,对于每个处理器节点,计算其与其他节点的负载差异及负载差异权重,根据所述负载差异的大小调整计算任务迁移到节点的概率,可以使用以下公式计算计算任务迁移到其他节点的概率,实现了系统的科学调度。
4、通过使用非一致性内存访问(NUMA)的方式调用系统资源,可以提高内存访问效率,优化任务调度和负载平衡,减少远程访问开销,以及提高系统的可扩展性和适应性。这些技术效果有助于提升系统的性能、资源利用率和响应能力。
附图说明
图1为本发明中提出的多任务线程池的策略配置方法的示意图;
图2为本发明中提出的多任务线程池的策略配置装置的示意图。
具体实施方式
下面结合附图并举实施例,对本发明进行详细描述。
本发明提供了一种多任务线程池的策略配置方法,如图1所示,包括:
步骤1,在进程中定义一个或多个线程池对象,通过线程池对象与策略类之间的关联ID或关联名称,实现线程池对象与对应的策略类之间的关联;指定一个参数或属性,用于标识线程池对象与策略类之间的关联关系,例如关联ID或关联名称。
在线程池对象的定义中,添加一个成员变量,用于引用或存储与之关联的策略类的实例。提供一个接口或方法,用于将线程池对象与相应的策略类进行绑定或关联。例如:“通过为线程池对象添加关联ID参数,在线程池对象的定义中添加一个与之关联的策略类的引用成员变量,或提供一个绑定方法,将线程池对象与相应的策略类进行关联。
线程池的使用策略是对线程池的一些参数进行了配置,这些参数影响了线程池的行为。在线程池运行之前,必须先初始化策略。线程池和策略关联起来。使用策略来初始化和启动线程池的过程如下:
ThreadPool g_pool; //线程池对象
;
g_pool.Init(policy); //初始化线程池. 线程池中将保存policy指针
g_pool.Start();//启动线程池
步骤2,配置所述线程池的运行策略类,所述线程池策略类包括单线程执行模式、多线程执行模式;其中所述单线程执行模式的运行策略包括一个主线程,根据所述主线程处理线程池中的任务;
其中ThreadPolicyClass是所使用的线程池策略类,需要用户选择合适的策略类,目前可以选择的有ThreadPolicySingle, ThreadPolicyBase和ThreadPolicyNuma,policy指针保存在线程池中。
线程池可以被配置为单线程执行模式和多线程执行模式,两种模式下,接口可以保持一致。但在单线程下,接口的一些行为是不一致的,下边是两种模式下的一些差别。
单线程执行模式并不是指整个线程池中只开了一个线程在处理任务,而是指整个进程中,只有一个主线程,由主线程去处理线程池中的任务。按照上边的线程池调用方法,主线程在调用Start后,将不会再返回。所有需要做的事,都必须在Start之前,以任务的形式加到线程池里去。要终止线程池,使得主线程从Start()中返回,就必须在某个任务里调用Stop().
除了这种使用线程池的方法,新线程池加入了另一种单线程使用模式:
//线程池使用单线程的第二种方式
ThreadPool g_pool;
;
g_pool.Init(policy);
//不调用g_pool.Start().
while(!not_quit)
{
g_pool.TryProcessAllTask(); //在循环中不停地调用TryProcessAllTask
//do other thing…
}
这种模式下,不调用g_pool.Start,而是在主循环中,不停地调用TryProcessAllTask来处理线程池中的任务。当循环结束时,可以认为线程池也结束了,不需要调用Stop和WaitStop接口来终止线程池。
对于单线程,分组及顺序并无实际的意义。所有的任务将在同一个线程中被顺序地执行,这种情况下,使用线程池的好处就是可以异步地执行一些任务,并且与多线程接口一致。
所述多线程执行模式的运行策略包括根据吞吐量及延迟确定任务的分类,并根据所述分类为所述任务分配线程;
多线程下,需要配置策略的参数。参数有两类,其中一种是分组、顺序的个数,另一种是处理特定分组或顺序的线程个数。这两种参数需要配合起来,以达到最优的效果。
ThreadPolicyBase是基础的线程池策略。有三个接口,用以设置policy的参数:
int ThreadPolicyBase::AddGroup(int cpu_node, int seq_count);
增加分组,cpu_node可以填0(这个是为Numa策略准备的), seq_count是在该group下的顺序个数。返回group_index。
在策略中,至少需要1个group_index为0的组。如果没有组,则下面的调用则是无定义的。
使用 ThreadPolicyBase::SetSequenceCount()设置”全局的Sequence”个数。
void ThreadPolicyBase::AddThread(int group_index, unsigned int task_type_mask);
添加Thread, group_index是该thread要处理哪个group。在默认情况下,所有的线程都和一个group关联。Task_type_mask是该线程所能处理的任务分类集。可以选择的值有:全局任务TASK_TYPE_GLOBAL、分组任务TASK_TYPE_GROUP、顺序任务TASK_TYPE_SEQUENCE、分组顺序任务TASK_TYPE_GROUP_SEQ,分别对应如下:
例如创建一个处理global和group0的线程可写作:
Policy->AddThread(0, TASK_TYPE_GLOBAL | TASK_TYPE_GROUP);
注意:a. 这个接口应该在AddGroup之后调用。如果在AddGroup之前调,group_index将是个非法的值。b.在调用完AddThread后,此时线程并没有启动,仅只是完成了“注册”。在线程池Start时,这些线程才会被创建。
两种参数需要配合起来,假如策略中设置了分组和顺序任务,而没有添加处理这种任务的线程,则这些任务将留在线程池中,永远得不到执行,这一点要特别注意。
典型的支持多线程的线程池初始化步骤如下:
ThreadPool g_pool; //这个是所要使用的线程池。
;
policy->AddGroup(-1, 0); //加入group 0, group中无顺序
policy->AddGroup(-1, 2); //加入group 1, group中有两个顺序
policy->SetSequenceCount(2); //设置Sequence的数目为2。
policy->AddThread(0, GNET::TASK_TYPE_GLOBAL); //加入一个处理全局的线程
//加入两个处理group1的seq的线程
policy->AddThread(1, TASK_TYPE_GROUP_SEQ);
policy->AddThread(1, TASK_TYPE_GROUP_SEQ);
//加入两个线程,用于处理全局Sequence,可以和其它的TASK共用线程。这里是和GlobalTask共用,一般情况下,有几个seq,就开几个处理seq的线程。
对于多线程执行模式中的任务的执行策略包括如下步骤:
步骤S1: 计算每种任务的执行概率,具体可采用如下公式计算:
其中,表示执行该任务分类的线程数,/>表示该任务分类中每个线程的吞吐量;/>表示执行该任务分类时的加速比,/> 表示该任务分类的优先级,k 表示总任务数;表示求最小值的运算;/>表示所有任务分类的线程数;/>表示所有任务分类中每个线程的吞吐量;/>表示执行所有任务分类时的加速比;/>表示所有任务分类的优先级。
加速比(Speedup)是指在使用多个处理器或计算资源时,相对于使用单个处理器或计算资源的执行时间的比值。通常情况下,加速比越高,表示任务在使用多个处理器或计算资源时能够更快地完成。
假设我们有以下任务参数:
任务1:
任务2:
任务3:
我们可以按照以下步骤计算执行概率:
S1=0.455,S2=0.37,S3=0.16,
步骤S2: 对任务执行概率进行排序
将所有任务按照执行概率 p_i 从高到低进行排序,得到任务的执行概率排序列表。
S1 >S2 >S3
步骤S3: 确定当前任务所属分类
对于当前任务,假设其执行概率为 S。根据任务的执行概率排序列表,找到当前任务的位置。根据当前任务的位置,可以确定其所属的任务分类。
以下是根据执行概率确定当前任务所属分类的几种情况:
如果当前任务在排序列表的前部(执行概率较高),可以划分为全局任务(GlobalTask)。这是因为全局任务具有较大的吞吐量,可以均匀分派任务并具有较短的延迟。
如果当前任务在排序列表的中部(执行概率适中),可以划分为分组任务(GroupTask)。分组任务可以将任务划分为若干分组,并由不同线程处理不同分组的任务,减少锁冲突,并且可以通过策略在指定的CPU或Numa内存节点上运行。
如果当前任务在排序列表的后部(执行概率较低),可以划分为顺序任务(SequenceTask)。顺序任务可以保证任务按照指定的顺序执行,并且以批量方式执行,具有较高的吞吐量,但可能会有较大的执行延迟。
如果当前任务在排序列表中,并且具有较高的执行概率且相邻的任务分类相同,可以划分为分组顺序任务(GroupSeqTask)。这种任务分类融合了局部化和顺序执行的特点,将任务划分为分组并按顺序执行,同时具有较高的吞吐量。
根据以上步骤和情况,可以确定当前任务所属的具体分类。请注意,这只是一种基于给定公式的概率计算和划分方式,实际情况可能需要根据具体应用场景和需求进行调整和优化。
步骤3,在所述进程池中通过使用非一致性内存访问(NUMA)的方式调用系统资源。
非一致性内存访问(NUMA)的线程模式是一种在多处理器系统中优化内存访问的方式。在NUMA系统中,多个处理器(或称为节点)与各自的本地内存模块相连,每个处理器可以访问其本地内存更快,而对其他处理器的本地内存访问则会较慢。
在NUMA线程模式中,任务被分组到与处理器节点对应的线程中执行。这样可以确保任务在本地内存中执行,减少对远程内存的访问。通过将任务分配给本地节点的线程执行,可以提高内存访问的局部性和性能。
NUMA线程模式通常通过操作系统和编程框架的支持来实现。在编写多线程应用程序时,可以使用NUMA感知的线程绑定策略,将任务绑定到特定的处理器节点上,从而最大程度地减少远程内存访问和延迟。这有助于提高应用程序的性能和可伸缩性,并减少非一致性内存访问对系统性能的影响。
如果存在多个目标节点具有相同的最高概率,可以使用随机选择、轮转选择或其他决策方式来确定迁移目标节点根据任务迁移概率。
在NUMA线程模式中,处理器节点和对应线程的执行以及本地内存和远程内存之间的管理通常依赖于操作系统和编程框架的支持。下面是一种基本的算法框架,用于在NUMA架构下管理处理器节点、线程和内存访问:
确定处理器节点和线程绑定关系:根据系统的NUMA拓扑信息,确定每个处理器节点和对应的线程。使用线程绑定策略将任务与特定的处理器节点绑定,确保任务在本地节点上执行。内存分配和数据布局:在程序初始化阶段,根据NUMA节点分配内存,使得每个节点分配的内存尽可能位于本地节点。将数据结构和数据在内存中进行布局,以最大程度地利用本地内存,减少远程内存访问。远程内存访问优化:使用本地节点访问优先的策略,尽可能在本地节点上执行任务,减少对远程内存的访问。当需要访问远程内存时,使用远程访问优化技术,如远程缓存、远程读取等,以降低延迟和带宽开销。
动态负载平衡:监测任务和线程的负载情况,根据负载情况进行动态的任务调度和线程迁移,以实现负载均衡。下面是一个简单的动态负载平衡算法,根据负载情况进行动态的任务调度和线程迁移,包括对于每一个任务,通过等待时间或任务执行时间计算其当前负载;对于每个处理器节点,计算其与其他节点的负载差异及负载差异权重,对于每个处理器节点,计算其与其他节点的负载差异, 可以使用负载差异的绝对值或其他度量方式;对于每个节点,计算其负载差异权重,根据负载差异的大小或其他因素进行调整;对于某个任务和处理器节点,计算任务迁移到节点的概率,可以使用以下公式计算计算任务迁移到其他节点的概率,根据负载情况进行动态的任务调度和线程迁移,包括对于每一个任务,通过等待时间或任务执行时间计算其当前负载;对于每个处理器节点,计算其与其他节点的负载差异及负载差异权重,根据所述负载差异的大小调整计算任务迁移到节点的概率,可以使用以下公式计算计算任务迁移到其他节点的概率,
其中,表示对于任务x和处理器节点y,计算将任务x迁移到处理器节点y的概率;/>表示节点y的负载差异权重,/>表示最大的负载差异权重,/>表示任务x的当前负载,/>表示最大的任务负载;
选择具有最高概率的目标处理器节点,以当前节点的负载超过阈值及迁移后的节点负载低于当前节点,作为任务迁移的触发条件进行线程迁移;如果存在多个目标节点具有相同的最高概率,可以使用随机选择、轮转选择或其他决策方式来确定迁移目标节点。
本实施例中,通过根据吞吐量和延迟确定任务分类,并使用概率来决定任务的执行方式,可以带来以下技术效果:
均衡的任务分派:根据任务的吞吐量和延迟,任务分类的执行概率可以反映任务的特性和执行要求。通过计算概率并进行排序,可以实现对任务的均衡分派,确保各种分类的任务都能得到合理的执行机会。这有助于提高整体系统的平衡性和性能。
减少锁冲突和资源竞争:任务的分组和顺序执行可以减少线程间的锁冲突和资源竞争。通过将任务划分为不同的组或保证任务按顺序执行,可以使得不同任务之间的并发性降低,从而减少了锁的争用和线程间的竞争,提高了任务的执行效率。
高吞吐量和低延迟:通过根据任务的特性和需求来确定任务分类,可以将任务分配到适合的执行方式中。例如,对于高吞吐量要求的任务,可以选择全局任务或分组任务来实现并发执行;对于有序性要求高的任务,可以选择顺序任务或分组顺序任务来保证执行顺序。这样可以根据任务的性质和优先级,以及系统的资源情况,提供高吞吐量和低延迟的任务执行效率。
灵活的配置和适应性:通过使用策略对象和动态计算任务执行概率,可以对任务的执行方式进行灵活配置和调整。这使得系统能够根据实际需求和运行时环境的变化,动态地调整任务的分派和执行策略,以适应不同的工作负载和系统条件。
通过使用非一致性内存访问(NUMA)的方式调用系统资源,可以带来以下技术效果:提高内存访问效率:通过将任务与特定的处理器节点绑定,并根据NUMA节点分配内存,可以使得每个节点分配的内存尽可能位于本地节点。采用本地节点访问优先的策略,可以减少对远程内存的访问,从而提高内存访问效率和降低延迟。
优化任务调度和负载平衡:使用动态负载平衡算法监测任务和线程的负载情况,根据负载情况进行动态的任务调度和线程迁移。这样可以实现任务的均衡分派,确保各个处理器节点上的任务负载相对平衡,提高系统的整体性能和资源利用率。
减少远程访问开销:当需要访问远程内存时,采用远程缓存和远程读取等机制,可以降低延迟和带宽开销。这有助于减少对远程节点的访问频率,提高任务执行的效率和响应速度。
提高系统的可扩展性和适应性:通过根据系统的非一致性内存访问(NUMA)拓扑信息,确定处理器节点和线程的绑定关系,并使用线程绑定策略进行任务调度和资源分配,可以提高系统的可扩展性和适应性。系统能够根据系统配置和运行时环境的变化,动态地调整任务和资源的分配,以优化性能和适应不同的工作负载需求。
本发明提供了一种多任务线程池的策略配置装置,如图2所示,包括:
线程池管理模块,在进程中定义一个或多个线程池对象,通过线程池对象与策略类之间的关联ID或关联名称,实现线程池对象与对应的策略类之间的关联;指定一个参数或属性,用于标识线程池对象与策略类之间的关联关系,例如关联ID或关联名称。
在线程池对象的定义中,添加一个成员变量,用于引用或存储与之关联的策略类的实例。提供一个接口或方法,用于将线程池对象与相应的策略类进行绑定或关联。例如:“通过为线程池对象添加关联ID参数,在线程池对象的定义中添加一个与之关联的策略类的引用成员变量,或提供一个绑定方法,将线程池对象与相应的策略类进行关联。
线程池的使用策略是对线程池的一些参数进行了配置,这些参数影响了线程池的行为。在线程池运行之前,必须先初始化策略。线程池和策略关联起来。使用策略来初始化和启动线程池的过程如下:
ThreadPool g_pool; //线程池对象
;
g_pool.Init(policy); //初始化线程池. 线程池中将保存policy指针
g_pool.Start();//启动线程池
策略配置模块,配置所述线程池的运行策略类,所述线程池策略类包括单线程执行模式、多线程执行模式;其中所述单线程执行模式的运行策略包括一个主线程,根据所述主线程处理线程池中的任务;
其中ThreadPolicyClass是所使用的线程池策略类,需要用户选择合适的策略类,目前可以选择的有ThreadPolicySingle, ThreadPolicyBase和ThreadPolicyNuma,policy指针保存在线程池中。
线程池可以被配置为单线程执行模式和多线程执行模式,两种模式下,接口可以保持一致。但在单线程下,接口的一些行为是不一致的,下边是两种模式下的一些差别。
单线程执行模式并不是指整个线程池中只开了一个线程在处理任务,而是指整个进程中,只有一个主线程,由主线程去处理线程池中的任务。按照上边的线程池调用方法,主线程在调用Start后,将不会再返回。所有需要做的事,都必须在Start之前,以任务的形式加到线程池里去。要终止线程池,使得主线程从Start()中返回,就必须在某个任务里调用Stop().
除了这种使用线程池的方法,新线程池加入了另一种单线程使用模式:
//线程池使用单线程的第二种方式
ThreadPool g_pool;
;
g_pool.Init(policy);
//不调用g_pool.Start().
while(!not_quit)
{
g_pool.TryProcessAllTask(); //在循环中不停地调用TryProcessAllTask
//do other thing…
}
这种模式下,不调用g_pool.Start,而是在主循环中,不停地调用TryProcessAllTask来处理线程池中的任务。当循环结束时,可以认为线程池也结束了,不需要调用Stop和WaitStop接口来终止线程池。
对于单线程,分组及顺序并无实际的意义。所有的任务将在同一个线程中被顺序地执行,这种情况下,使用线程池的好处就是可以异步地执行一些任务,并且与多线程接口一致。
所述多线程执行模式的运行策略包括根据吞吐量及延迟确定任务的分类,并根据所述分类为所述任务分配线程;
多线程下,需要配置策略的参数。参数有两类,其中一种是分组、顺序的个数,另一种是处理特定分组或顺序的线程个数。这两种参数需要配合起来,以达到最优的效果。
ThreadPolicyBase是基础的线程池策略。有三个接口,用以设置policy的参数:
int ThreadPolicyBase::AddGroup(int cpu_node, int seq_count);
增加分组,cpu_node可以填0(这个是为Numa策略准备的), seq_count是在该group下的顺序个数。返回group_index。
在策略中,至少需要1个group_index为0的组。如果没有组,则下面的调用则是无定义的。
使用 ThreadPolicyBase::SetSequenceCount()设置”全局的Sequence”个数。
void ThreadPolicyBase::AddThread(int group_index, unsigned int task_type_mask);
添加Thread, group_index是该thread要处理哪个group。在默认情况下,所有的线程都和一个group关联。Task_type_mask是该线程所能处理的任务分类集。可以选择的值有:全局任务TASK_TYPE_GLOBAL、分组任务TASK_TYPE_GROUP、顺序任务TASK_TYPE_SEQUENCE、分组顺序任务TASK_TYPE_GROUP_SEQ,分别对应如下:
例如创建一个处理global和group0的线程可写作:
Policy->AddThread(0, TASK_TYPE_GLOBAL | TASK_TYPE_GROUP);
注意:a. 这个接口应该在AddGroup之后调用。如果在AddGroup之前调,group_index将是个非法的值。b.在调用完AddThread后,此时线程并没有启动,仅只是完成了“注册”。在线程池Start时,这些线程才会被创建。
两种参数需要配合起来,假如策略中设置了分组和顺序任务,而没有添加处理这种任务的线程,则这些任务将留在线程池中,永远得不到执行,这一点要特别注意。
典型的支持多线程的线程池初始化步骤如下:
ThreadPool g_pool; //这个是所要使用的线程池。
;
policy->AddGroup(-1, 0); //加入group 0, group中无顺序
policy->AddGroup(-1, 2); //加入group 1, group中有两个顺序
policy->SetSequenceCount(2); //设置Sequence的数目为2。
policy->AddThread(0, GNET::TASK_TYPE_GLOBAL); //加入一个处理全局的线程
//加入两个处理group1的seq的线程
policy->AddThread(1, GNET::TASK_TYPE_GROUP_SEQ);
policy->AddThread(1, GNET::TASK_TYPE_GROUP_SEQ);
//加入两个线程,用于处理全局Sequence,可以和其它的TASK共用线程。这里是和GlobalTask共用,一般情况下,有几个seq,就开几个处理seq的线程
执行概率计算模块,计算每种任务的执行概率,具体可采用如下公式计算:
其中,每种任务的执行概率中,/>表示执行该种任务的线程数,/>表示每个线程的吞吐量,/>表示执行该种任务时的加速比,/> 表示该种任务的优先级,k 表示总任务数,min表示求较小值。
加速比(Speedup)是指在使用多个处理器或计算资源时,相对于使用单个处理器或计算资源的执行时间的比值。通常情况下,加速比越高,表示任务在使用多个处理器或计算资源时能够更快地完成。
假设我们有以下任务参数:
任务1:
任务2:
任务3:
我们可以按照以下步骤计算执行概率:
S1=0.455,S2=0.37,S3=0.16,
概率排序模块: 对任务执行概率进行排序
将所有任务按照执行概率 p_i 从高到低进行排序,得到任务的执行概率排序列表。
S1 >S2 >S3
确定任务分类模块: 确定当前任务所属分类
对于当前任务,假设其执行概率为 S。根据任务的执行概率排序列表,找到当前任务的位置。根据当前任务的位置,可以确定其所属的任务分类。
以下是根据执行概率确定当前任务所属分类的几种情况:
如果当前任务在排序列表的前部(执行概率较高),可以划分为全局任务(GlobalTask)。这是因为全局任务具有较大的吞吐量,可以均匀分派任务并具有较短的延迟。
如果当前任务在排序列表的中部(执行概率适中),可以划分为分组任务(GroupTask)。分组任务可以将任务划分为若干分组,并由不同线程处理不同分组的任务,减少锁冲突,并且可以通过策略在指定的CPU或Numa内存节点上运行。
如果当前任务在排序列表的后部(执行概率较低),可以划分为顺序任务(SequenceTask)。顺序任务可以保证任务按照指定的顺序执行,并且以批量方式执行,具有较高的吞吐量,但可能会有较大的执行延迟。
如果当前任务在排序列表中,并且具有较高的执行概率且相邻的任务分类相同,可以划分为分组顺序任务(GroupSeqTask)。这种任务分类融合了局部化和顺序执行的特点,将任务划分为分组并按顺序执行,同时具有较高的吞吐量。
根据以上步骤和情况,可以确定当前任务所属的具体分类。请注意,这只是一种基于给定公式的概率计算和划分方式,实际情况可能需要根据具体应用场景和需求进行调整和优化。
资源调用模块,用于在所述进程池中通过非一致性内存访问(NUMA)的方式调用系统资源。
非一致性内存访问(NUMA)的线程模式是一种在多处理器系统中优化内存访问的方式。在NUMA系统中,多个处理器(或称为节点)与各自的本地内存模块相连,每个处理器可以访问其本地内存更快,而对其他处理器的本地内存访问则会较慢。
在NUMA线程模式中,任务被分组到与处理器节点对应的线程中执行。这样可以确保任务在本地内存中执行,减少对远程内存的访问。通过将任务分配给本地节点的线程执行,可以提高内存访问的局部性和性能。
NUMA线程模式通常通过操作系统和编程框架的支持来实现。在编写多线程应用程序时,可以使用NUMA感知的线程绑定策略,将任务绑定到特定的处理器节点上,从而最大程度地减少远程内存访问和延迟。这有助于提高应用程序的性能和可伸缩性,并减少非一致性内存访问对系统性能的影响。
如果存在多个目标节点具有相同的最高概率,可以使用随机选择、轮转选择或其他决策方式来确定迁移目标节点根据任务迁移概率。
在NUMA线程模式中,处理器节点和对应线程的执行以及本地内存和远程内存之间的管理通常依赖于操作系统和编程框架的支持。下面是一种基本的算法框架,用于在NUMA架构下管理处理器节点、线程和内存访问:
确定处理器节点和线程绑定关系:根据系统的NUMA拓扑信息,确定每个处理器节点和对应的线程。使用线程绑定策略将任务与特定的处理器节点绑定,确保任务在本地节点上执行。内存分配和数据布局:在程序初始化阶段,根据NUMA节点分配内存,使得每个节点分配的内存尽可能位于本地节点。将数据结构和数据在内存中进行布局,以最大程度地利用本地内存,减少远程内存访问。远程内存访问优化:使用本地节点访问优先的策略,尽可能在本地节点上执行任务,减少对远程内存的访问。当需要访问远程内存时,使用远程访问优化技术,如远程缓存、远程读取等,以降低延迟和带宽开销。
动态负载平衡:监测任务和线程的负载情况,根据负载情况进行动态的任务调度和线程迁移,以实现负载均衡。下面是一个简单的动态负载平衡算法,根据负载情况进行动态的任务调度和线程迁移,包括对于每一个任务,通过等待时间或任务执行时间计算其当前负载;对于每个处理器节点,计算其与其他节点的负载差异及负载差异权重,对于每个处理器节点,计算其与其他节点的负载差异, 可以使用负载差异的绝对值或其他度量方式;对于每个节点,计算其负载差异权重,根据负载差异的大小或其他因素进行调整;对于某个任务和处理器节点,计算任务迁移到节点的概率,可以使用以下公式计算计算任务迁移到其他节点的概率,根据负载情况进行动态的任务调度和线程迁移,包括对于每一个任务,通过等待时间或任务执行时间计算其当前负载;对于每个处理器节点,计算其与其他节点的负载差异及负载差异权重,根据所述负载差异的大小调整计算任务迁移到节点的概率,可以使用以下公式计算计算任务迁移到其他节点的概率,
其中,表示对于任务x和处理器节点y,计算将任务x迁移到节点y的概率;/>表示节点y的负载差异权重,/>表示最大的负载差异权重,/>表示任务x的当前负载,表示最大的任务负载;
选择具有最高概率的目标处理器节点,以当前节点的负载超过阈值及迁移后的节点负载低于当前节点,作为任务迁移的触发条件进行线程迁移如果存在多个目标节点具有相同的最高概率,可以使用随机选择、轮转选择或其他决策方式来确定迁移目标节点。
本实施例中,通过根据吞吐量和延迟确定任务分类,并使用概率来决定任务的执行方式,可以带来以下技术效果:
均衡的任务分派:根据任务的吞吐量和延迟,任务分类的执行概率可以反映任务的特性和执行要求。通过计算概率并进行排序,可以实现对任务的均衡分派,确保各种分类的任务都能得到合理的执行机会。这有助于提高整体系统的平衡性和性能。
减少锁冲突和资源竞争:任务的分组和顺序执行可以减少线程间的锁冲突和资源竞争。通过将任务划分为不同的组或保证任务按顺序执行,可以使得不同任务之间的并发性降低,从而减少了锁的争用和线程间的竞争,提高了任务的执行效率。
高吞吐量和低延迟:通过根据任务的特性和需求来确定任务分类,可以将任务分配到适合的执行方式中。例如,对于高吞吐量要求的任务,可以选择全局任务或分组任务来实现并发执行;对于有序性要求高的任务,可以选择顺序任务或分组顺序任务来保证执行顺序。这样可以根据任务的性质和优先级,以及系统的资源情况,提供高吞吐量和低延迟的任务执行效率。
灵活的配置和适应性:通过使用策略对象和动态计算任务执行概率,可以对任务的执行方式进行灵活配置和调整。这使得系统能够根据实际需求和运行时环境的变化,动态地调整任务的分派和执行策略,以适应不同的工作负载和系统条件。
通过使用非一致性内存访问(NUMA)的方式调用系统资源,可以带来以下技术效果:提高内存访问效率:通过将任务与特定的处理器节点绑定,并根据NUMA节点分配内存,可以使得每个节点分配的内存尽可能位于本地节点。采用本地节点访问优先的策略,可以减少对远程内存的访问,从而提高内存访问效率和降低延迟。
优化任务调度和负载平衡:使用动态负载平衡算法监测任务和线程的负载情况,根据负载情况进行动态的任务调度和线程迁移。这样可以实现任务的均衡分派,确保各个处理器节点上的任务负载相对平衡,提高系统的整体性能和资源利用率。
减少远程访问开销:当需要访问远程内存时,采用远程缓存和远程读取等机制,可以降低延迟和带宽开销。这有助于减少对远程节点的访问频率,提高任务执行的效率和响应速度。
提高系统的可扩展性和适应性:通过根据系统的非一致性内存访问(NUMA)拓扑信息,确定处理器节点和线程的绑定关系,并使用线程绑定策略进行任务调度和资源分配,可以提高系统的可扩展性和适应性。系统能够根据系统配置和运行时环境的变化,动态地调整任务和资源的分配,以优化性能和适应不同的工作负载需求。
通过使用非一致性内存访问(NUMA)的方式调用系统资源,可以提高内存访问效率,优化任务调度和负载平衡,减少远程访问开销,以及提高系统的可扩展性和适应性。这些技术效果有助于提升系统的性能、资源利用率和响应能力。
本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机可读存储介质为固态硬盘,上存储有基于多任务线程池的策略配置程序,所述程序包括以下内容:线程池管理模块,用于在进程中定义一个或多个线程池对象,通过线程池对象与策略类之间的关联ID或关联名称,实现线程池对象与对应的策略类之间的关联,并控制任务的提交和执行;
策略配置模块,用于配置所述线程池的运行策略类,包括单线程执行模式、多线程执行模式的设置和切换;其中所述单线程执行模式的运行策略包括一个主线程,根据所述主线程处理线程池中的任务;
所述多线程执行模式的运行策略包括根据吞吐量及延迟确定任务的分类,并根据所述分类为所述任务分配线程;
任务调度模块,根据吞吐量和延迟,确定任务的分类并分配线程执行,支持全局任务、分组任务、顺序任务和分组顺序任务的分类和调度。
资源管理模块:通过非一致性内存访问(NUMA)方式调用系统资源,包括确定处理器节点和线程绑定关系、动态负载平衡算法、远程内存访问优化;所述计算机程序被处理器执行时实现所述的多任务线程池的策略配置方法。
综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
对于本领域技术人员而言,显然本发明实施例不限于上述示范性实施例的细节,而且在不背离本发明实施例的精神或基本特征的情况下,能够以其他的具体形式实现本发明实施例。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明实施例的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本发明实施例内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。系统、装置或终端权利要求中陈述的多个单元、模块或装置也可以由同一个单元、模块或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
最后应说明的是,以上实施方式仅用以说明本发明实施例的技术方案而非限制,尽管参照以上较佳实施方式对本发明实施例进行了详细说明,本领域的普通技术人员应当理解,可以对本发明实施例的技术方案进行修改或等同替换都不应脱离本发明实施例的技术方案的精神和范围。
Claims (7)
1.一种多任务线程池的策略配置方法,其特征在于,包括:
在进程中定义一个或多个线程池对象,通过所述线程池对象与策略类之间的关联ID或关联名称,实现所述线程池对象与对应的所述策略类之间的关联;
配置所述线程池的运行策略类,所述线程池策略类包括单线程执行模式、多线程执行模式;其中所述单线程执行模式的运行策略包括一个主线程,根据所述主线程处理线程池中的任务;
所述多线程执行模式的运行策略包括根据吞吐量及延迟确定任务的分类,并根据所述分类为所述任务分配线程;
在所述进程池中通过使用非一致性内存访问NUMA的方式调用系统资源;
其中,根据如下公式计算任务分类执行的概率:
,
其中,表示执行该任务分类的线程数,/>表示该任务分类中每个线程的吞吐量;表示执行该任务分类时的加速比,/> 表示该任务分类的优先级,k 表示总任务数;表示求最小值的运算;/>表示所有任务分类的线程数;/>表示所有任务分类中每个线程的吞吐量;/>表示执行所有任务分类时的加速比;/>表示所有任务分类的优先级;
对于多个任务,分别计算其中每种任务的执行概率,对任务执行概率进行排序,对于当前任务,根据任务的执行概率排序列表,找到当前任务的位置,根据当前任务的位置,确定其所属的任务分类;
其中,通过使用非一致性内存访问NUMA的方式调用系统资源包括:确定处理器节点和线程绑定关系;
根据系统的非一致性内存访问NUMA拓扑信息,确定每个处理器节点和对应的线程;
使用线程绑定策略将任务与特定的处理器节点绑定,根据非一致性内存访问NUMA节点分配内存,使得每个节点分配的内存位于本地节点,使用本地节点访问优先的策略,在本地节点上执行任务,减少对远程内存的访问;
当需要访问远程内存时,使用远程缓存、远程读取以降低延迟和带宽开销;其中,使用动态负载平衡算法监测任务和线程的负载情况,根据负载情况进行动态的任务调度和线程迁移。
2.如权利要求1所述的多任务线程池的策略配置方法,其特征在于,所述单线程执行模式包括:在线程池中定义所有待执行的任务,通过启动函数或结束函数来控制任务的启动或终止;或者不断询问并处理线程池中需要执行的任务,直到线程池中所有任务均被执行完毕。
3.如权利要求1-2任意一项所述的多任务线程池的策略配置方法,其特征在于,多线程执行模式的运行策略中,确定的所述任务的分类包括:全局任务、分组任务、顺序任务、分组顺序任务。
4.如权利要求1所述的多任务线程池的策略配置方法,其特征在于,所述多线程执行模式的运行策略还包括:根据策略任务由高层的策略模块决定以何种方式加入任务,用于实现运行期多态的效果。
5.如权利要求1所述的多任务线程池的策略配置方法,其特征在于,根据负载情况进行动态的任务调度和线程迁移,包括对于每一个任务,通过等待时间或任务执行时间计算其当前负载;对于每个处理器节点,计算其与其他节点的负载差异及负载差异权重,根据所述负载差异的大小调整计算任务迁移到节点的概率,使用以下公式计算任务迁移到其他节点的概率:
,
其中,表示对于任务x和处理器节点y,计算将任务x迁移到处理器节点y的概率;表示节点y的负载差异权重,/>表示最大的负载差异权重,/>表示任务x的当前负载,/>表示最大的任务负载;
选择具有最高概率的目标处理器节点,以当前节点的负载超过阈值及迁移后的节点负载低于当前节点,作为任务迁移的触发条件进行线程迁移。
6.一种多任务线程池的策略配置装置,其特征在于,
线程池管理模块,用于在进程中定义一个或多个线程池对象,通过所述线程池对象与策略类之间的关联ID或关联名称,实现线程池对象与对应的所述策略类之间的关联,并控制任务的提交和执行;
策略配置模块,用于配置所述线程池的运行策略类,所述线程池策略类包括单线程执行模式、多线程执行模式;其中所述单线程执行模式的运行策略包括一个主线程,根据所述主线程处理线程池中的任务;
所述多线程执行模式的运行策略包括根据吞吐量及延迟确定任务的分类,并根据所述分类为所述任务分配线程;
资源调用模块,用于在所述进程池中通过使用非一致性内存访问NUMA的方式调用系统资源;
其中,所述策略配置模块,根据如下公式计算任务分类执行的概率:
,
其中,表示执行该任务分类的线程数,/>表示该任务分类中每个线程的吞吐量;表示执行该任务分类时的加速比,/> 表示该任务分类的优先级,k 表示总任务数;表示求最小值的运算;/>表示所有任务分类的线程数;/>表示所有任务分类中每个线程的吞吐量;/>表示执行所有任务分类时的加速比;/>表示所有任务分类的优先级;
对于多个任务,分别计算其中每种任务的执行概率,对任务执行概率进行排序,对于当前任务,根据任务的执行概率排序列表,找到当前任务的位置,根据当前任务的位置,确定其所属的任务分类;
其中,所述资源调用模块,通过使用非一致性内存访问NUMA的方式调用系统资源包括:确定处理器节点和线程绑定关系;
根据系统的非一致性内存访问NUMA拓扑信息,确定每个处理器节点和对应的线程;
使用线程绑定策略将任务与特定的处理器节点绑定,根据非一致性内存访问NUMA节点分配内存,使得每个节点分配的内存位于本地节点,使用本地节点访问优先的策略,在本地节点上执行任务,减少对远程内存的访问;
当需要访问远程内存时,使用远程缓存、远程读取以降低延迟和带宽开销;其中,使用动态负载平衡算法监测任务和线程的负载情况,根据负载情况进行动态的任务调度和线程迁移。
7.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机可读存储介质为固态硬盘,上存储有基于多任务线程池的策略配置程序,所述程序包括以下内容:线程池管理模块,用于在进程中定义一个或多个线程池对象,通过线程池对象与策略类之间的关联ID或关联名称,实现线程池对象与对应的策略类之间的关联,并控制任务的提交和执行;
策略配置模块,用于配置所述线程池的运行策略类,包括单线程执行模式、多线程执行模式的设置和切换;其中所述单线程执行模式的运行策略包括一个主线程,根据所述主线程处理线程池中的任务;
所述多线程执行模式的运行策略包括根据吞吐量及延迟确定任务的分类,并根据所述分类为所述任务分配线程;
任务调度模块,根据吞吐量和延迟,确定任务的分类并分配线程执行,支持全局任务、分组任务、顺序任务和分组顺序任务的分类和调度;
资源管理模块,通过非一致性内存访问NUMA方式调用系统资源,包括确定处理器节点和线程绑定关系、动态负载平衡算法、远程内存访问优化;所述计算机程序被处理器执行时实现如权利要求1至5任一项所述的多任务线程池的策略配置方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311108472.4A CN116841751B (zh) | 2023-08-31 | 2023-08-31 | 一种多任务线程池的策略配置方法、装置和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311108472.4A CN116841751B (zh) | 2023-08-31 | 2023-08-31 | 一种多任务线程池的策略配置方法、装置和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116841751A CN116841751A (zh) | 2023-10-03 |
CN116841751B true CN116841751B (zh) | 2023-11-10 |
Family
ID=88167480
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311108472.4A Active CN116841751B (zh) | 2023-08-31 | 2023-08-31 | 一种多任务线程池的策略配置方法、装置和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116841751B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101887367A (zh) * | 2010-06-22 | 2010-11-17 | 天津大学 | 一种多级并行化编程方法 |
CN102203737A (zh) * | 2011-05-20 | 2011-09-28 | 华为技术有限公司 | 多线程访问多副本的方法和装置 |
CN104679593A (zh) * | 2015-03-13 | 2015-06-03 | 浪潮集团有限公司 | 一种基于smp系统的任务调度优化方法 |
CN105700946A (zh) * | 2016-01-15 | 2016-06-22 | 华中科技大学 | 一种numa架构下平衡多线程间访存延迟的调度系统及方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10417056B2 (en) * | 2015-08-04 | 2019-09-17 | Oracle International Corporation | Systems and methods for performing concurrency restriction and throttling over contended locks |
-
2023
- 2023-08-31 CN CN202311108472.4A patent/CN116841751B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101887367A (zh) * | 2010-06-22 | 2010-11-17 | 天津大学 | 一种多级并行化编程方法 |
CN102203737A (zh) * | 2011-05-20 | 2011-09-28 | 华为技术有限公司 | 多线程访问多副本的方法和装置 |
CN104679593A (zh) * | 2015-03-13 | 2015-06-03 | 浪潮集团有限公司 | 一种基于smp系统的任务调度优化方法 |
CN105700946A (zh) * | 2016-01-15 | 2016-06-22 | 华中科技大学 | 一种numa架构下平衡多线程间访存延迟的调度系统及方法 |
Also Published As
Publication number | Publication date |
---|---|
CN116841751A (zh) | 2023-10-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Gai et al. | Minimizing memory utilization of real-time task sets in single and multi-processor systems-on-a-chip | |
US8156495B2 (en) | Scheduling threads on processors | |
US9086925B2 (en) | Methods of processing core selection for applications on manycore processors | |
US6633897B1 (en) | Method and system for scheduling threads within a multiprocessor data processing system using an affinity scheduler | |
Lelli et al. | An efficient and scalable implementation of global EDF in Linux | |
US7975269B2 (en) | Parallel processor methods and apparatus | |
US11030014B2 (en) | Concurrent distributed graph processing system with self-balance | |
US9201689B2 (en) | Software emulation of massive hardware threading for tolerating remote memory references | |
EP0969382A2 (en) | Method for efficient non-virtual main memory management | |
US8239873B2 (en) | Speedy event processing | |
CN109445565B (zh) | 一种基于流多处理器内核独占和预留的gpu服务质量保障方法 | |
CN107329822B (zh) | 面向多源多核系统的基于超任务网的多核调度方法 | |
CN112925616A (zh) | 任务分配方法、装置、存储介质及电子设备 | |
JPH03113563A (ja) | マルチプロセッサスケジューリング方法 | |
Ishkov | A complete guide to Linux process scheduling | |
Tang et al. | AEML: An acceleration engine for multi-GPU load-balancing in distributed heterogeneous environment | |
WO2005048009A2 (en) | Method and system for multithreaded processing using errands | |
Yu et al. | Colab: a collaborative multi-factor scheduler for asymmetric multicore processors | |
CN111597044A (zh) | 任务调度方法、装置、存储介质及电子设备 | |
Cai et al. | ABSS: An Adaptive Batch-Stream Scheduling Module for Dynamic Task Parallelism on Chiplet-based Multi-Chip Systems | |
CN116841751B (zh) | 一种多任务线程池的策略配置方法、装置和存储介质 | |
Lagerstrom et al. | PScheD Political scheduling on the CRAY T3E | |
Kaladevi et al. | Processor co-allocation enabling advanced reservation of jobs in MultiCluster systems | |
Ramasubramanian et al. | Studies on Performance Aspect of Scheduling Algorithms on Multicore Platform | |
US20230418667A1 (en) | Computing device for handling tasks in a multi-core processor, and method for operating computing device |
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 |