CN112395054A - 一种线程调度方法、装置及系统 - Google Patents
一种线程调度方法、装置及系统 Download PDFInfo
- Publication number
- CN112395054A CN112395054A CN201910753515.1A CN201910753515A CN112395054A CN 112395054 A CN112395054 A CN 112395054A CN 201910753515 A CN201910753515 A CN 201910753515A CN 112395054 A CN112395054 A CN 112395054A
- Authority
- CN
- China
- Prior art keywords
- thread
- task
- processed
- category
- tasks
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 75
- 238000004590 computer program Methods 0.000 claims description 10
- 238000012545 processing Methods 0.000 description 9
- 238000013507 mapping Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 4
- 230000000903 blocking effect Effects 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
Images
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
-
- 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/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- 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/5038—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 execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/48—Indexing scheme relating to G06F9/48
- G06F2209/484—Precedence
-
- 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
-
- 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/5021—Priority
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
技术领域
本发明涉及计算机技术领域,特别是涉及一种线程调度方法、装置及系统。
背景技术
线程池是一种多线程处理形式。线程池中一般包括多个线程和调度器。调度器接收到任务后,调度线程对该任务进行处理。如果任务较多,可调用线程较少,则任务会延时执行。
相关方案中,通常为任务划分优先级,调度器优先调度线程执行优先级较高的任务。但是这种方案中,某一种优先级较高的任务可能会占用所有线程,导致其他任务完全不能执行。可见,这种调度方案并不合理。
发明内容
本发明实施例的目的在于提供一种线程调度方法、装置及系统,以提高调度合理性。
为达到上述目的,本发明实施例提供了一种线程调度方法,包括:
获取待处理任务;
确定所述待处理任务的类别,作为待处理类别;
确定所述待处理类别对应的线程占用阈值,作为待比较阈值;
判断所述待处理类别的任务所占用的线程数量是否达到所述待比较阈值;
如果达到,则将所述待处理任务投递至所述待处理类别的任务占用的线程的缓冲队列中。
可选的,所述将所述待处理任务投递至所述待处理类别的任务占用的线程的缓冲队列中,包括:
获取所述待处理类别的任务占用的各线程的任务计数,所述任务计数为线程的缓冲队列中的任务数量;
确定任务计数最小的线程,作为目标线程;
将所述待处理任务投递至所述目标线程的缓冲队列中。
可选的,在所述确定所述待处理任务的类别,作为待处理类别之后,还包括:
查找所述待处理类别对应的线程任务计数表;
所述获取所述待处理类别的任务占用的各线程的任务计数,包括:
在查找到的线程任务计数表中,读取所述待处理类别的任务占用的各线程的任务计数。
可选的,在未确定出所述待处理任务的类别的情况下,或者在未查找到所述待处理类别对应的线程任务计数表的情况下,或者在所述待处理类别的任务所占用的线程数量未达到所述待比较阈值的情况下,还包括:
调度空闲线程或者创建新线程处理所述待处理任务。
可选的,所述调度空闲线程或者创建新线程处理所述待处理任务,包括:
判断是否存在空闲线程;
如果存在,调度所述空闲线程处理所述待处理任务;
如果不存在,判断当前线程数量是否达到预设阈值;
如果未达到,创建新线程处理所述待处理任务;
如果达到,则进行等待,直至存在空闲线程后,调度所述空闲线程处理所述待处理任务。
可选的,在所述将所述待处理任务投递至所述目标线程的缓冲队列中之后,还包括:
在查找到的线程任务计数表中,将所述目标线程的任务计数加1;
在所述目标线程对所述待处理任务进行处理后,在查找到的线程任务计数表中,将所述目标线程的任务计数减1。
为达到上述目的,本发明实施例还提供了一种线程调度装置,包括:
获取模块,用于获取待处理任务;
第一确定模块,用于确定所述待处理任务的类别,作为待处理类别;
第二确定模块,用于确定所述待处理类别对应的线程占用阈值,作为待比较阈值;
判断模块,用于判断所述待处理类别的任务所占用的线程数量是否达到所述待比较阈值;如果达到,则触发第一调度模块;
第一调度模块,用于将所述待处理任务投递至所述待处理类别的任务占用的线程的缓冲队列中。
可选的,所述第一调度模块,包括:
获取子模块,用于获取所述待处理类别的任务占用的各线程的任务计数,所述任务计数为线程的缓冲队列中的任务数量;
确定子模块,用于确定任务计数最小的线程,作为目标线程;
投递子模块,用于将所述待处理任务投递至所述目标线程的缓冲队列中。
可选的,所述装置还包括:
查找模块,用于查找所述待处理类别对应的线程任务计数表;
所述获取子模块,具体用于:在查找到的线程任务计数表中,读取所述待处理类别的任务占用的各线程的任务计数。
可选的,所述装置还包括:
第二调度模块,用于在未确定出所述待处理任务的类别的情况下,或者在未查找到所述待处理类别对应的线程任务计数表的情况下,或者在所述待处理类别的任务所占用的线程数量未达到所述待比较阈值的情况下,调度空闲线程或者创建新线程处理所述待处理任务。
可选的,所述第二调度模块,具体用于:
判断是否存在空闲线程;
如果存在,调度所述空闲线程处理所述待处理任务;
如果不存在,判断当前线程数量是否达到预设阈值;
如果未达到,创建新线程处理所述待处理任务;
如果达到,则进行等待,直至存在空闲线程后,调度所述空闲线程处理所述待处理任务。
可选的,所述装置还包括:
计数模块,用于在查找到的线程任务计数表中,将所述目标线程的任务计数加1;在所述目标线程对所述待处理任务进行处理后,在查找到的线程任务计数表中,将所述目标线程的任务计数减1。
为达到上述目的,本发明实施例还提供了一种线程调度系统,包括:调度器和多个工作线程;
所述调度器,用于获取待处理任务;确定所述待处理任务的类别,作为待处理类别;确定所述待处理类别对应的线程占用阈值,作为待比较阈值;判断所述待处理类别的任务所占用的工作线程数量是否达到所述待比较阈值;如果达到,则将所述待处理任务投递至所述待处理类别的任务占用的工作线程的缓冲队列中;
所述工作线程,用于从所述工作线程的缓冲队列中获取任务,并执行所获取的任务。
可选的,所述系统还包括:任务队列,所述任务队列中包括一个或多个任务;
所述调度器,还用于从所述任务队列中获取待处理任务。
为达到上述目的,本发明实施例还提供了一种电子设备,包括处理器和存储器;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现上述任一种线程调度方法。
为达到上述目的,本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一种线程调度方法。
本发明实施例中,对任务进行分类,并设定各任务类别对应的线程占用阈值,如果某个类别的任务所占用的线程数量达到该类别对应的阈值,再获取到该类别的待处理任务后,将该待处理任务投递至该类别的任务已占用的线程的缓冲队列中。可见,本方案中,可以根据实际需求,设定每个类别的任务占用的最大线程数量,减少了某一种任务占用所有线程的情况,提高了调度合理性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的线程调度方法的第一种流程示意图;
图2为本发明实施例提供的线程调度方法的第二种流程示意图;
图3为本发明实施例提供的线程处理流程示意图;
图4为本发明实施例提供的一种线程调度装置的结构示意图;
图5为本发明实施例提供的一种线程调度系统的结构示意图;
图6为本发明实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为了解决上述技术问题,本发明实施例提供了一种线程调度方法、装置及设备。该线程调度方法、装置及系统可以应用于PC(personal computer,个人计算机)、手机、平板电脑、服务器等各种电子设备,或者,也可以应用于线程池中的调度器,具体不做限定。下面首先对本发明实施例提供的线程调度方法进行详细介绍。为了方便描述,以下内容中以执行主体为调度器为例进行说明。
图1为本发明实施例提供的线程调度方法的第一种流程示意图,包括:
S101:获取待处理任务。
举例来说,如果本实施例应用于线程池中,调度器可以从线程池的任务队列中获取待处理任务。本实施例中,对每个任务的处理方式类似,下面以处理一个任务为例进行说明,为了区分描述,将该一个任务称为待处理任务。
S102:确定待处理任务的类别,作为待处理类别。
本实施例中,可以预先对任务进行分类。比如,读写磁盘任务、网络请求任务,可以归为“IO(输入/输出,Input/Output)类”;保活、定时任务可以归为“定时类”。或者也可以对不同用户的请求任务进行分类,比如,用户1的请求任务可以归为“用户1类”,用户2的请求任务可以归为“用户2类”,等等,具体分类情况不做限定。
为了方便描述,这里将S101中获取的任务的类别称为待处理类别。
S103:确定待处理类别对应的线程占用阈值,作为待比较阈值。
本实施例中,可以为各个类别设定其对应的线程占用阈值,该阈值可以理解为该类别的任务所允许占用的最大线程数量。该阈值可以大于等于1,如果本实施例应用于线程池中,则该阈值可以小于线程池中可分配的最大线程数量。
S104:判断待处理类别的任务所占用的线程数量是否达到待比较阈值。如果达到,执行S105。
S105:将待处理任务投递至待处理类别的任务占用的线程的缓冲队列中。
本实施例中,对于一个类别来说,如果该类别的任务较多,导致该类别的任务所占用的线程数量达到针对该类别设定的线程占用阈值,则后续再获取到该类别的新任务(S101中的待处理任务)后,不再调用其他线程处理该新任务,而是将该新任务投递至已经在处理该类别任务的线程的缓冲队列中,也就是等待已经在处理该类别任务的线程处理该新任务。这样,可以根据实际需求,设定每个类别的任务占用的最大线程数量,减少了某一种任务占用所有线程的情况,提高了调度合理性。
作为一种实施方式,S105可以包括:获取所述待处理类别的任务占用的各线程的任务计数,所述任务计数为线程的缓冲队列中的任务数量;确定任务计数最小的线程,作为目标线程;将所述待处理任务投递至所述目标线程的缓冲队列中。
举例来说,假设待处理任务的类别为类别A,除待处理任务之外,类别A还包括4个任务:任务1、任务2、任务3和任务4,这4个任务占用了3个线程:线程1、线程2和线程3。分别获取这3个线程的任务计数,任务计数就是线程的缓冲队列中的任务数量,也可以理解为线程还未处理的任务数量,假设线程1的任务计数为2,线程2的任务计数为1,线程3的的任务计数为1。线程2和线程3的任务计数都最小,可以任意选择一个作为目标线程,假设选择线程2作为目标线程,则将待处理任务投递至线程2的缓冲队列中。这样,线程2的任务计数加1,变为2。
作为一种实施方式,在S102之后,可以查找所述待处理类别对应的线程任务计数表;这种情况下,可以在查找到的线程任务计数表中,读取所述待处理类别的任务占用的各线程的任务计数。
一种情况下,可以建立一个二级映射表,该映射表的一级表中,键为“类别标识”,比如可以为类别名称、类别ID等,值为“类别标识对应的线程任务计数表”。该线程任务计数表即为二级表,该二级表中的键为“线程标识”,该二级表中的值为“线程标识对应的任务计数”,该任务计数也就是线程的缓冲队列中的任务数量,也可以理解为线程还未处理的任务数量。
这种情况下,在确定待处理任务的类别后,在该映射表的一级表中查找该类别对应的线程任务计数表,也就是二级表;在查找到的二级表中,读取各线程的任务计数,也就是该类别的任务所占用的各线程的任务计数;将任务计数最小的线程确定为目标线程,将待处理任务投递至目标线程的缓冲队列中。
另外,这种情况下,在将待处理任务投递至所述目标线程的缓冲队列中之后,在查找到的线程任务计数表中,将所述目标线程的任务计数加1;在目标线程对待处理任务进行处理后,在查找到的线程任务计数表中,将目标线程的任务计数减1。
作为一种实施方式,在S102未确定出待处理任务的类别的情况下,可以调度空闲线程或者创建新线程处理所述待处理任务。
本实施方式中,对于一些任务来说,可以不设定其对应的类别,也就是说,这些任务不受分类限制;如果获取到这些任务,则可以直接调度空闲线程或者创建新线程来处理这些任务。
作为一种实施方式,在未查找到所述待处理类别对应的线程任务计数表的情况下,可以调度空闲线程或者创建新线程处理所述待处理任务。
本实施方式中,如果未查找到待处理类别对应的线程任务计数表,则表示还未调度过线程处理该类别的任务,这种情况下,可以直接调度空闲线程或者创建新线程来处理这些任务,并且创建该类别对应的线程任务计数表。举例来说,该线程任务计数表可以为上述内容中的二级映射表。
作为一种实施方式,在S104判断结果为否的情况下,可以调度空闲线程或者创建新线程处理所述待处理任务。
本实施方式中,如果待处理类别的任务所占用的线程数量未达到所述待比较阈值,则直接调度空闲线程或者创建新线程处理所述待处理任务。
一种情况下,上述这些实施方式中的“调度空闲线程或者创建新线程处理所述待处理任务”可以有多种情况:比如,可以调度空闲线程处理该待处理任务;或者也可以创建新线程处理该待处理任务;或者也可以先判断是否存在空闲线程,如果存在,则调度空闲线程处理该待处理任务,如果不存在,则创建新线程处理该待处理任务。
或者,也可以判断是否存在空闲线程;如果存在,调度所述空闲线程处理所述待处理任务;如果不存在,判断当前线程数量是否达到预设阈值;如果未达到,创建新线程处理所述待处理任务;如果达到,则进行等待,直至存在空闲线程后,调度所述空闲线程处理所述待处理任务。
举例来说,如果本方案应用于线程池中,可以针对线程池设定可分配的最大线程数量,也就是该预设阈值,如果当前线程数量达到该预设阈值,则不再创建新线程,而是等待空闲线程。
下面结合图2及图3介绍一种具体的实施方式:
本实施方式可以应用于线程池系统中,该线程池系统可以包括:
1、1个任务队列。该队列中可以包括一个或多个未处理的任务,或者说未被分配线程的任务。该队列中的任务可以按照期望执行时间由小到大进行排序。
举例来说,可以为该队列中的各任务分配优先级,优先级可以包括:超高、高、普通、延时。优先级还可扩充为更多级别,具体不做限定。该期望执行时间可以根据任务的优先级来确定,优先级越高,则期望执行时间越短。若不同的任务具有相同的期望执行时间,则可以按照“先入先出”原则进行排序。
2、1个调度器线程。该调度器线程即可以理解为图1实施例的执行主体,该调度器线程从上述任务队列中获取任务,具体来说,可以从任务队列头部依次获取各个任务。该调度器线程取出任务后,则为取出的任务分配工作线程。调度器线程为任务分配工作线程后,可以将任务投递至为其分配的工作线程的缓冲队列中。
3、N个工作线程,N大于1。每个工作线程包括一个缓冲队列,工作线程从自身的缓冲队列中取出任务并执行,该缓冲队列中的任务可以按照先入先出进行排序。图1实施例中所说的“线程”即为图2实施例中的“工作线程”,以下内容中,如没有注明是调度器线程,则出现的“线程”都可以认为表示“工作线程”。
举例来说,可以预先配置线程池属性。比如,线程池属性可以包括:常驻线程数、最大线程数、线程空闲超时回收时间。
可以预先对任务进行分类,并且为各个类别设定其对应的线程占用阈值,该阈值可以理解为该类别的任务所允许占用的最大线程数量。线程池内部可以维护一个配置关系表,该配置关系表中存储各类别对应的线程占用阈值。
举例来说,可以对一些“在执行顺序上有要求、或者是对线程最大占用值有要求的任务”进行分类,而有一些任务可以不进行分类。可以根据实际情况对任务进行分类或者不分类。比如,读写磁盘任务、网络请求任务,可以归为“IO类”。可以为任务附加上“类别”标识,对于未划分类别的任务来说,其类别标识可以为空。
如上所述,为每类任务设定一个线程占用阈值,该阈值可以大于等于1,可以小于线程池中可分配的最大线程数量。如果针对某类别的任务设定的线程占用阈值为1,则表示利用一个工作线程对该类别的任务依次进行处理,也就是说,该类别的任务不能并行处理,只能顺序处理。对于一些对执行顺序有特殊要求的任务来说,可以将其对应的线程占用阈值为1。
然后调度器线程执行如下步骤:
步骤1、获取待处理任务。
步骤2、判断待处理任务是否存在类别标识,如果存在类别标识,转到步骤3。如果类别标识为空,则表示待处理任务不受分类限制,转到步骤6。
步骤3:查询该类别标识对应的线程任务计数表。
一种情况下,可以建立一个二级映射表,该映射表的一级表中,键为“类别标识”,值为“类别标识对应的线程任务计数表”。该线程任务计数表即为二级表,该二级表中的键为“线程标识”,该二级表中的值为“线程标识对应的任务计数”,该任务计数也就是工作线程的缓冲队列中的任务数量,也可以理解为工作线程还未处理的任务数量。将二级表作为变量map,判断map的大小是否大于0,也就是判断是否存在该类别标识对应的线程任务计数表。若大于0,也就是存在该类别标识对应的线程任务计数表,转到步骤4;若不大于0,也就是不存在该类别标识对应的线程任务计数表,转到步骤6。
步骤4:确定该类别标识对应的线程占用阈值,作为待比较阈值;判断二级表map中的线程标识的数量是否小于待比较阈值,若小于,转到步骤6,若大于等于,转到步骤5。
如上所述,线程池内部可以维护一个配置关系表,该配置关系表中存储各类别对应的线程占用阈值,可以通过该配置关系表,查找该类别标识对应的线程占用阈值。若未查到,则认为待比较阈值为1。
步骤5:查询二级表map中任务计数最小的工作线程,作为目标线程,将待处理任务投递至目标线程的缓冲队列中,并将目标线程的任务计数加1。转到步骤14。
步骤6:判断是否存在空闲工作线程,若不存在,转到步骤7,若存在,转到步骤12。
步骤7:判断当前线程数量是否达到预设阈值。该预设阈值可以理解为针对线程池设定可分配的最大线程数量。
若未达到,转到步骤8,若达到,转到步骤11。
步骤8:创建新工作线程,转到步骤9。
步骤9:将待处理任务投递至创建的新工作线程的缓冲队列中,转到步骤10。
步骤10:若待处理任务存在类别标识,将创建的新工作线程的标识插入到map中,并将该新工作线程的任务计数置为1,转到步骤14。
步骤11:阻塞直到有空闲工作线程出现,转到步骤12。
步骤12:将待处理任务投递至空闲工作线程的缓冲队列中,转到步骤13。
步骤13:若待处理任务存在类别标识,将空闲工作线程的标识插入到map中,并将该空闲工作线程的任务计数置为1。
步骤14:结束,等待新任务。
对于一个工作线程来说,其处理流程可以如图3所示,包括:
步骤一、工作线程从自身缓冲队列中取出任务,并转到步骤二。
步骤二、工作线程执行取出的任务,执行完成后,转到步骤三。
步骤三、判断执行完成的任务是否有类别标识,若有,转到步骤四,若没有,转到步骤五。
步骤四、在该类别标识对应的二级表map中,将该工作线程的标识对应的任务计数减1,若任务计数减1后等于0,则将该工作线程的标识从二级表中移除。转到步骤五。
步骤五:尝试获取新任务,若有新任务,则回到步骤一;否则阻塞。
一些情况下,还可以对空闲超时的线程进行回收。
应用本实施方式,第一方面,可以满足用户对不同任务的不同处理需求,提高线程池的利用率和可用性。比如,对于某一类别的任务来说,执行顺序并不重要,但是处理时长较长,利用本实施方式,可以将这类任务的线程占用阈值调整为大于1且小于线程池允许的最大线程数量,这样,这类任务既能够得到较高的并发能力,而且也不会占用将线程池所有线程,不会使得其他类别的任务无法立即执行。
此外,用户可以结合一些动态调节算法公式,动态地调整该线程占用阈值,以达到对线程池资源的最优使用。其中,动态调节算法公式可以为基于相关技术中在线程池中添加线程的方式。用户可基于相关技术中在线程池中添加线程的方式,确定待处理类别对应的线程数量,进而调整待处理类别对应的线程占用阈值。
例如,利用线程池吞吐量和待处理类别对应的线程利用率的测量,结合对待处理类别对应的线程占用阈值调整动作的功效的分析,以确定是否在当前大小调整动作中向线程池添加待处理类别对应的线程或从中去除待处理类别对应的线程。进而用户可基于待处理类别对应的线程数量,调整待处理类别对应的线程占用阈值。
再例如,监测各线程执行当前任务的运行时长;当根据监测到的运行时长确定有线程运行超时时,创建新的线程,并使用新创建的线程执行运行超时的线程所应执行的任务。进而用户可基于待处理类别对应的线程数量,调整待处理类别对应的线程占用阈值。
再例如,基于对子应用程序中的请求,确定当前分配给子应用程序中的线程数量,将所确定的线程数量与预定义的最大线程阈值作比较。如果所确定的线程数据不大于预定义的最大线程阈值,则分配线程池中的线程以处理所接收的请求。进而用户可基于待处理类别对应的线程数量,调整待处理类别对应的线程占用阈值。
第二方面,本实施方式中,通过任务队列能够缓存更多的任务,充分利用线程池资源。第三方面,本实施方式中,可以为任务队列中的各任务分配优先级,调度器优先处理优先级高的任务。
与上述方法实施例相对应,本发明实施例还提供一种线程调度装置,如图4所示,包括:
获取模块401,用于获取待处理任务;
第一确定模块402,用于确定所述待处理任务的类别,作为待处理类别;
第二确定模块403,用于确定所述待处理类别对应的线程占用阈值,作为待比较阈值;
判断模块404,用于判断所述待处理类别的任务所占用的线程数量是否达到所述待比较阈值;如果达到,则触发第一调度模块;
第一调度模块405,用于将所述待处理任务投递至所述待处理类别的任务占用的线程的缓冲队列中。
作为一种实施方式,第一调度模块405包括:获取子模块、确定子模块和投递子模块(图中未示出),其中,
获取子模块,用于获取所述待处理类别的任务占用的各线程的任务计数,所述任务计数为线程的缓冲队列中的任务数量;
确定子模块,用于确定任务计数最小的线程,作为目标线程;
投递子模块,用于将所述待处理任务投递至所述目标线程的缓冲队列中。
作为一种实施方式,所述装置还包括:查找模块(图中未示出),用于查找所述待处理类别对应的线程任务计数表;
所述获取子模块,具体用于:在查找到的线程任务计数表中,读取所述待处理类别的任务占用的各线程的任务计数。
作为一种实施方式,所述装置还包括:
第二调度模块(图中未示出),用于在未确定出所述待处理任务的类别的情况下,或者在未查找到所述待处理类别对应的线程任务计数表的情况下,或者在所述待处理类别的任务所占用的线程数量未达到所述待比较阈值的情况下,调度空闲线程或者创建新线程处理所述待处理任务。
作为一种实施方式,所述第二调度模块,具体用于:
判断是否存在空闲线程;
如果存在,调度所述空闲线程处理所述待处理任务;
如果不存在,判断当前线程数量是否达到预设阈值;
如果未达到,创建新线程处理所述待处理任务;
如果达到,则进行等待,直至存在空闲线程后,调度所述空闲线程处理所述待处理任务。
作为一种实施方式,所述装置还包括:
计数模块(图中未示出),用于在查找到的线程任务计数表中,将所述目标线程的任务计数加1;在所述目标线程对所述待处理任务进行处理后,在查找到的线程任务计数表中,将所述目标线程的任务计数减1。
本发明实施例中,对任务进行分类,并设定各任务类别对应的线程占用阈值,如果某个类别的任务所占用的线程数量达到该类别对应的阈值,再获取到该类别的待处理任务后,将该待处理任务投递至该类别的任务已占用的线程的缓冲队列中。可见,本方案中,可以根据实际需求,设定每个类别的任务占用的最大线程数量,减少了某一种任务占用所有线程的情况,提高了调度合理性。
本发明实施例还提供了一种线程调度系统,如图5所示,包括:调度器和多个工作线程(工作线程1、工作线程2……工作线程N);
所述调度器,用于获取待处理任务;确定所述待处理任务的类别,作为待处理类别;确定所述待处理类别对应的线程占用阈值,作为待比较阈值;判断所述待处理类别的任务所占用的工作线程数量是否达到所述待比较阈值;如果达到,则将所述待处理任务投递至所述待处理类别的任务占用的工作线程的缓冲队列中;
所述工作线程,用于从所述工作线程的缓冲队列中获取任务,并执行所获取的任务。
举例来说,一种情况下,该调度器也可以为一种线程,可以将其称为调度器线程。每个工作线程可以包含一个缓冲队列,该缓冲队列中可以包括该工作线程未执行的任务。
作为一种实施方式,该系统还可以包括:任务队列,所述任务队列中包括一个或多个任务;
所述调度器,还用于从所述任务队列中获取待处理任务。
举例来说,调度器可以从任务队列头部依次获取各个任务。该调度器取出任务后,为取出的任务分配工作线程。调度器为任务分配工作线程后,可以将任务投递至为其分配的工作线程的缓冲队列中。
本发明实施例还提供了一种电子设备,如图6所示,包括处理器601和存储器602,
存储器602,用于存放计算机程序;
处理器601,用于执行存储器602上所存放的程序时,实现上述任一种线程调度方法。
上述的存储器可以包括随机存取存储器(Random Access Memory,RAM),也可以包括非易失性存储器(Non-Volatile Memory,NVM),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital SignalProcessing,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一种线程调度方法。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例、系统实施例、设备实施例、计算机可读存储介质实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
Claims (11)
1.一种线程调度方法,其特征在于,包括:
获取待处理任务;
确定所述待处理任务的类别,作为待处理类别;
确定所述待处理类别对应的线程占用阈值,作为待比较阈值;
判断所述待处理类别的任务所占用的线程数量是否达到所述待比较阈值;
如果达到,则将所述待处理任务投递至所述待处理类别的任务占用的线程的缓冲队列中。
2.根据权利要求1所述的方法,其特征在于,所述将所述待处理任务投递至所述待处理类别的任务占用的线程的缓冲队列中,包括:
获取所述待处理类别的任务占用的各线程的任务计数,所述任务计数为线程的缓冲队列中的任务数量;
确定任务计数最小的线程,作为目标线程;
将所述待处理任务投递至所述目标线程的缓冲队列中。
3.根据权利要求2所述的方法,其特征在于,在所述确定所述待处理任务的类别,作为待处理类别之后,还包括:
查找所述待处理类别对应的线程任务计数表;
所述获取所述待处理类别的任务占用的各线程的任务计数,包括:
在查找到的线程任务计数表中,读取所述待处理类别的任务占用的各线程的任务计数。
4.根据权利要求1至3任一所述的方法,其特征在于,在未确定出所述待处理任务的类别的情况下,或者在未查找到所述待处理类别对应的线程任务计数表的情况下,或者在所述待处理类别的任务所占用的线程数量未达到所述待比较阈值的情况下,还包括:
调度空闲线程或者创建新线程处理所述待处理任务。
5.一种线程调度装置,其特征在于,包括:
获取模块,用于获取待处理任务;
第一确定模块,用于确定所述待处理任务的类别,作为待处理类别;
第二确定模块,用于确定所述待处理类别对应的线程占用阈值,作为待比较阈值;
判断模块,用于判断所述待处理类别的任务所占用的线程数量是否达到所述待比较阈值;如果达到,则触发第一调度模块;
第一调度模块,用于将所述待处理任务投递至所述待处理类别的任务占用的线程的缓冲队列中。
6.根据权利要求5所述的装置,其特征在于,所述第一调度模块,包括:
获取子模块,用于获取所述待处理类别的任务占用的各线程的任务计数,所述任务计数为线程的缓冲队列中的任务数量;
确定子模块,用于确定任务计数最小的线程,作为目标线程;
投递子模块,用于将所述待处理任务投递至所述目标线程的缓冲队列中。
7.根据权利要求6所述的装置,其特征在于,所述装置还包括:
查找模块,用于查找所述待处理类别对应的线程任务计数表;
所述获取子模块,具体用于:在查找到的线程任务计数表中,读取所述待处理类别的任务占用的各线程的任务计数。
8.根据权利要求5至7任一所述的装置,其特征在于,所述装置还包括:
第二调度模块,用于在未确定出所述待处理任务的类别的情况下,或者在未查找到所述待处理类别对应的线程任务计数表的情况下,或者在所述待处理类别的任务所占用的线程数量未达到所述待比较阈值的情况下,调度空闲线程或者创建新线程处理所述待处理任务。
9.一种线程调度系统,其特征在于,包括:调度器和多个工作线程;
所述调度器,用于获取待处理任务;确定所述待处理任务的类别,作为待处理类别;确定所述待处理类别对应的线程占用阈值,作为待比较阈值;判断所述待处理类别的任务所占用的工作线程数量是否达到所述待比较阈值;如果达到,则将所述待处理任务投递至所述待处理类别的任务占用的工作线程的缓冲队列中;
所述工作线程,用于从所述工作线程的缓冲队列中获取任务,并执行所获取的任务。
10.一种电子设备,其特征在于,包括处理器和存储器;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现权利要求1-4任一所述的方法步骤。
11.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-4任一所述的方法步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910753515.1A CN112395054B (zh) | 2019-08-15 | 2019-08-15 | 一种线程调度方法、装置及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910753515.1A CN112395054B (zh) | 2019-08-15 | 2019-08-15 | 一种线程调度方法、装置及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112395054A true CN112395054A (zh) | 2021-02-23 |
CN112395054B CN112395054B (zh) | 2024-07-02 |
Family
ID=74601605
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910753515.1A Active CN112395054B (zh) | 2019-08-15 | 2019-08-15 | 一种线程调度方法、装置及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112395054B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113126968A (zh) * | 2021-05-19 | 2021-07-16 | 网易(杭州)网络有限公司 | 任务执行方法、装置、电子设备和存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106020954A (zh) * | 2016-05-13 | 2016-10-12 | 深圳市永兴元科技有限公司 | 线程管理方法及装置 |
CN106528065A (zh) * | 2015-09-14 | 2017-03-22 | 阿里巴巴集团控股有限公司 | 一种线程获取方法及设备 |
CN108846632A (zh) * | 2018-05-28 | 2018-11-20 | 浙江口碑网络技术有限公司 | 线程处理方法及装置 |
CN110008012A (zh) * | 2019-03-12 | 2019-07-12 | 平安普惠企业管理有限公司 | 一种信号量许可的调整方法及装置 |
-
2019
- 2019-08-15 CN CN201910753515.1A patent/CN112395054B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106528065A (zh) * | 2015-09-14 | 2017-03-22 | 阿里巴巴集团控股有限公司 | 一种线程获取方法及设备 |
CN106020954A (zh) * | 2016-05-13 | 2016-10-12 | 深圳市永兴元科技有限公司 | 线程管理方法及装置 |
CN108846632A (zh) * | 2018-05-28 | 2018-11-20 | 浙江口碑网络技术有限公司 | 线程处理方法及装置 |
CN110008012A (zh) * | 2019-03-12 | 2019-07-12 | 平安普惠企业管理有限公司 | 一种信号量许可的调整方法及装置 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113126968A (zh) * | 2021-05-19 | 2021-07-16 | 网易(杭州)网络有限公司 | 任务执行方法、装置、电子设备和存储介质 |
CN113126968B (zh) * | 2021-05-19 | 2024-05-10 | 网易(杭州)网络有限公司 | 任务执行方法、装置、电子设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112395054B (zh) | 2024-07-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10606653B2 (en) | Efficient priority-aware thread scheduling | |
US10908954B2 (en) | Quality of service classes | |
WO2020228177A1 (zh) | 批量数据处理方法、装置、计算机设备及存储介质 | |
CN106547612B (zh) | 一种多任务处理方法及装置 | |
CN106911592B (zh) | 一种自适应资源分配方法及装置 | |
US20060206894A1 (en) | Method of scheduling jobs using database management system for real-time processing | |
US8627325B2 (en) | Scheduling memory usage of a workload | |
CN108681481B (zh) | 业务请求的处理方法及装置 | |
US10310891B2 (en) | Hand-off scheduling | |
CN106775948B (zh) | 一种基于优先级的云任务调度方法及装置 | |
CN106569892B (zh) | 资源调度方法与设备 | |
CN113886069A (zh) | 一种资源分配方法、装置、电子设备及存储介质 | |
CN113656178B (zh) | 数据处理方法、装置、设备及可读存储介质 | |
CN112395054B (zh) | 一种线程调度方法、装置及系统 | |
WO2019029721A1 (zh) | 任务的调度方法、装置、设备及存储介质 | |
Horowitz | A run-time execution model for referential integrity maintenance | |
US9298505B2 (en) | Time and space-deterministic task scheduling apparatus and method using multi-dimensional scheme | |
Zouaoui et al. | CPU scheduling algorithms: Case & comparative study | |
CN115658292A (zh) | 资源调度方法、装置、计算机设备和存储介质 | |
CN114564287A (zh) | 任务调度方法、手持式金融终端及可读存储介质 | |
KR20150089665A (ko) | 워크플로우 작업 스케줄링 장치 | |
CN110704489A (zh) | 一种数据库的查询方法、装置、设备及计算机存储介质 | |
US7793295B2 (en) | Setting bandwidth limiter and adjusting execution cycle of second device using one of the GBL classes selected based on priority of task from first device | |
US11989181B2 (en) | Optimal query scheduling for resource utilization optimization | |
CN113157404B (zh) | 任务处理方法和装置 |
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 |