CN112000455B - 一种多线程任务处理方法、装置及电子设备 - Google Patents

一种多线程任务处理方法、装置及电子设备 Download PDF

Info

Publication number
CN112000455B
CN112000455B CN202010946007.8A CN202010946007A CN112000455B CN 112000455 B CN112000455 B CN 112000455B CN 202010946007 A CN202010946007 A CN 202010946007A CN 112000455 B CN112000455 B CN 112000455B
Authority
CN
China
Prior art keywords
threshold range
thread
core
initialization
thread 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
Application number
CN202010946007.8A
Other languages
English (en)
Other versions
CN112000455A (zh
Inventor
王明星
包明生
杨接康
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huayun Data Holding Group Co ltd
Original Assignee
Huayun Data Holding Group Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Huayun Data Holding Group Co ltd filed Critical Huayun Data Holding Group Co ltd
Priority to CN202010946007.8A priority Critical patent/CN112000455B/zh
Publication of CN112000455A publication Critical patent/CN112000455A/zh
Application granted granted Critical
Publication of CN112000455B publication Critical patent/CN112000455B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/48Indexing scheme relating to G06F9/48
    • G06F2209/485Resource constraint
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5022Workload threshold

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

本发明提供了一种多线程任务处理方法、装置及电子设备,多线程任务处理方法包括为线程池的核心线程数设置初始化阈值范围;对输入线程池的任务过滤出IO密集型任务;采用轮询方式获取宿主机的指标数据,以确定线程池的核心线程数是否触发调整初始化阈值范围以得到当前阈值范围的事件;其中,是否触发调整初始化阈值范围的事件基于宿主机的指标数据予以确定,初始化阈值范围由核心线程数最大值与核心线程数最小值予以确定。通过本申请所揭示的技术方案,不仅提高了核心线程对多任务的响应能力,提高了基于线程池对IO密集型任务的响应能力,并能够有效地防止核心线程由于被频繁创建或者撤销所导致的不必要的计算开销。

Description

一种多线程任务处理方法、装置及电子设备
技术领域
本发明涉及计算机技术领域,尤其涉及一种多线程任务处理方法、装置及电子设备。
背景技术
线程池作为线程(thread)的集合,线程池在***启动时即创建大量空闲的线程,若程序将一个任务传给线程池,线程池就会启动一条线程来执行这个任务,执行结束以后,该线程并不会死亡,而是再次返回线程池中成为空闲状态,等待执行下一个任务。在云计算技术中,线程包含用户线程(User thread)与内核线程(Kernel thread),线程池保证内核线程的充分利用,并防止被过度调用,且能够支持高并发的任务响应。
现有技术中的线程池只能适应执行CPU密集型任务的场景,若当前线程数超过CPU的核心线程数时,线程池受限于宿主机中CPU的核心线程数的限制,因此不会额外增加核心线程,而是将线程排入队列中进行等待,以等待核心线程出现空闲时对该线程执行调用操作。然而,在云计算场景(例如云平台、Web***、APP)中,存在大量的IO操作、读/写操作、迁移操作等非CPU密集型任务。但当核心线程数达到上限后,即使将任务放入队列则任务依然是阻塞的,此时需要等待核心线程结束且不被其他任务抢占时才能被继续执行。由此导致线程池中的核心线程利用率较低,且无法满足对高并发任务的及时响应,对软件***或者云平台的稳定性也会造成一定的影响。
数据或者任务处理是CPU密集型任务,对数据或者任务执行接收或者发送操作是IO密集型任务。由于线程池中的核心线程规模(CorePoolSize)在线程池初始化时所包含的核心线程的数量是固定的。目前,为了提高对数据或者任务的并发处理能力,通常采用增加线程池中核心线程的技术手段予以实现。但是核心线程的数量配置过大则会导致***或者云平台中CPU及内存效果过大。为了保证资源对***或者云平台其他业务的合理响应,通常不能将CPU和/或内存的使用率分配给核心线程的使用率达到100%。现有技术中为了保证核心线程对任务的有效响应,通常为会为不同核心线程设置不同的优先级,以满足对不同任务的积极响应,具体参公开号为CN110502320A的中国发明专利公开本所示。同时,申请人指出如果过度无序的创建或者删除核心线程,必然导致不必要的计算开销,从而导致***或者云平台的不稳定性,并会对用户体验造成一定的影响。
有鉴于此,有必要对现有技术中的多线程任务处理方法及其装置予以改进,以解决上述问题。
发明内容
本发明的目的在于揭示一种多线程任务处理方法、装置及电子设备,用以解决现有技术所存在的缺陷,尤其是为了提高核心线程对多任务的响应能力,并提高基于线程池对IO密集型任务的响应能力,并防止核心线程由于被频繁创建或者撤销所导致的不必要的计算开销。
为实现上述第一个发明目的,本发明提供了一种多线程任务处理方法,包括:
为线程池的核心线程数设置初始化阈值范围;
对输入线程池的任务过滤出IO密集型任务;
采用轮询方式获取宿主机的指标数据,以确定线程池的核心线程数是否触发调整初始化阈值范围以得到当前阈值范围的事件;
其中,是否触发调整初始化阈值范围的事件基于宿主机的指标数据予以确定,所述初始化阈值范围由核心线程数最大值与核心线程数最小值予以确定。
作为本发明的进一步改进,所述初始化阈值范围仅由线程池根据宿主机的指标数据予以确定,所述当前阈值范围由线程池仅根据对宿主机执行轮询的前一个状态中宿主机的指标数据予以确定。
作为本发明的进一步改进,所述核心线程使用饱和策略响应由线程池所接收的自外部发起的多线程任务的访问请求,所述饱和策略由线程池下发。
作为本发明的进一步改进,所述宿主机的指标数据至少由CPU开销和/或磁盘IOPS予以定义。
作为本发明的进一步改进,采用轮询方式获取宿主机的指标数据后判断线程池中是否存在响应IO密集型任务所匹配的核心线程;
若是,则不更改初始化阈值范围或者当前阈值范围;
若否,则基于宿主机的指标数据予以确定初始化阈值范围或者当前阈值范围的调节趋势,其中调节趋势为增加核心线程数或者减少核心线程数。
作为本发明的进一步改进,所述多线程任务处理方法还包括:对初始化阈值范围或者当前阈值范围设置安全阈值范围,所述安全阈值范围大于初始化阈值范围的最小值或者当前阈值范围的最小值且小于初始化阈值范围的最大值或者当前阈值范围的最大值。
基于相同发明思想,本发明还揭示了一种多线程任务处理装置,包括:
初始化模块,为线程池的核心线程数设置初始化阈值范围;
任务过滤模块,对输入线程池的任务过滤出IO密集型任务;
轮询模块,采用轮询方式获取宿主机的指标数据,以确定线程池的核心线程数是否触发调整初始化阈值范围以得到当前阈值范围的事件;
阈值调整模块,基于宿主机的指标数据确定是否触发调整初始化阈值范围的事件予以确定,所述初始化阈值范围由核心线程数最大值与核心线程数最小值予以确定。
作为本发明的进一步改进,所述初始化阈值范围仅由线程池根据宿主机的指标数据予以确定,所述当前阈值范围由线程池仅根据对宿主机执行轮询的前一个状态中宿主机的指标数据予以确定。
作为本发明的进一步改进,所述宿主机的指标数据至少由CPU开销和/或磁盘IOPS予以定义。
作为本发明的进一步改进,基于所述阈值调整模块对初始化阈值范围或者当前阈值范围设置安全阈值范围,所述安全阈值范围大于初始化阈值范围的最小值或者当前阈值范围的最小值且小于初始化阈值范围的最大值或者当前阈值范围的最大值。
最后,本发明还揭示了一种电子设备,其特征在于,包括:
处理器,由至少一个存储单元组成的存储装置,以及
在处理器与存储装置之间建立通信连接的通信总线;
所述处理器用于执行存储装置中存储的一个或者多个程序,以实现如前述任一个发明创造所揭示的所述的多线程任务处理方法。
作为本发明的进一步改进,所述电子设备至少被配置为计算机、服务器、数据中心、虚拟集群、便携式移动终端、金融支付平台或者ERP***。
与现有技术相比,本发明的有益效果是:
首先,由于对输入线程池的多种任务过滤出IO密集型任务,尤其剔除了CPU密集型任务或者混合型任务,使得线程池在接收到多种不同类型的任务时能够有效地避免满目的创建不要的核心线程,并能够充分利用现有状态中的核心线程对IO密集型任务予以高效响应;
其次,采用对宿主机的指标数据以轮询方式予以确定核心线程的技术手段,使得基于宿主机所配置的云平台或者数据库***对IO密集型任务予以响应的过程中能够有效避免核心线程突破线程池的上限,提高了云平台或者数据库***运行的稳定性;
最后,通过引入安全阈值范围使得在上一次对宿主机的指标数据执行轮询后所确定的核心线程能够保持较为持久的容忍性及稳定性,在满足对IO密集型任务进行响应的同时又能有效地防止核心线程由于被频繁创建或者撤销所导致的不必要的计算开销。
附图说明
图1为本发明一种多线程任务处理方法的整体流程图;
图2为配置线程池的宿主机与客户端连接的拓扑图;
图3为位于客户端中的任务发起端下发的多个任务由线程池中的多个核心线程逻辑结构的示意图;
图4为对图3所示出的核心线程规模创建一个新的核心线程所形成的线程池的示意图;
图5为包含至少一个核心线程并对初始化阈值范围的实例;
图6为当前阈值范围并对当前阈值范围设置安全阈值范围的实例;
图7为本发明一种多线程任务处理方法的详细流程图;
图8为对输入线程池中的任务过滤出IO密集型任务的流程图;
图9为***垃圾回收机制对线程池中的正常的核心线程的生命周期流程图;
图10为***垃圾回收机制对线程池中的正常的核心线程的等待时间超过KeepAlive Time的生命周期流程图;
图11为本发明一种多线程任务处理装置的整体拓扑图;
图12为本发明一种电子设备的拓扑图。
具体实施方式
下面结合附图所示的各实施方式对本发明进行详细说明,但应当说明的是,这些实施方式并非对本发明的限制,本领域普通技术人员根据这些实施方式所作的功能、方法、或者结构上的等效变换或替代,均属于本发明的保护范围之内。
在详细阐述本申请各个实例之前,对本申请中所涉及的技术术语的含义予以必要说明,申请人指出其对下述技术术语的定义并不构成对本发明的唯一限定或者指定,本领域技术人员可通过下述术语说明以及各个实施例所蕴含的技术含义予以合理扩展。
术语“核心线程规模”,即CorePoolSize,受限于硬件、内存和性能,因此不可能无限制的创建任意数量的线程,每一台机器/***/宿主机允许的最大核心线程是一个有界值。因此基于Thread Pool Executor(线程池管理器)管理的核心线程数量是有界的。
术语“最小线程规模”是线程池允许被创建的数量最少的核心线程的数量;术语“最大线程规模”是是线程池允许被创建的数量最大的核心线程的数量。术语“规模”、“最大 ”及“最小值”在本申请指代核心线程或者非核心线程的数量。
术语“核心线程数”为核心线程的数量。
术语“非核心线程”通常设置超时时长,超过这个时长,非核心线程就会被回收。上述时长通常通过Keep Alive Time(保持活跃时间)予以设置,超时时长对核心线程及非核心线程同样适用。
术语“初始化阈值”或者“安全阈值范围”为核心线程的数量范围。
实施例一:
参图1所示,本实施例揭示了一种多线程任务处理方法的一种具体实施例。需要说明的是,在本申请中,步骤S1至步骤S4的行文描述仅仅为了便于技术方案的描述需要,并不对各个步骤之间的顺序予以严格限定。
由于现有技术中的线程池只能适应执行CPU密集型任务的场景,若当前核心线程数超过宿主机300的CPU所能创建的最大核心线程数(即核心线程数最大值Q)时,线程池100中所创建的核心线程数受限于CPU的核心线程数的限制,因此不会额外增加核心线程,而是将线程排入图3所示出的待执行任务队列中进行等待,以等待核心线程出现空闲时对该线程执行调用操作。通常的,线程池100中的核心线程数通常为宿主机300中CPU数量加二。
在本实施例中,一种多线程任务处理方法,包括以下步骤。申请人指出下述步骤S1至步骤S3的区分仅仅是为了便于技术方案的描述,并不构成对三个步骤之间予以严格区分。
首先,执行步骤S1、为线程池100的核心线程数设置初始化阈值范围。
线程池模式的本质是使用数量相对较少的核心线程处理相对无限的任务,并利用任务队列(Task Queue)对待处理的任务放入如图3中的待执行任务队列中予以缓存,并复用一定数量的工作者线程(Worker Thread)从待执行任务队列中取出某个任务或者某些个任务,并由某个核心线程或者某些个核心线程予以执行,并在任务被执行后释放该任务对核心线程的占用,并将该核心线程分配给输入线程池100的待执行任务队列中的其他任务。
如图2及图3所示,线程池100运行在宿主机300中,客户端200(例如浏览器或者安装有浏览器的计算机,即图3中的任务发起端21)与宿主机300之间以有线(网线或者光纤)或者无线(WIFI、ZIGBEE、2G~5G协议)的方式建立通信关系。用户通过客户端200对安装在宿主机300或者有宿主机300通过底层虚拟化技术所开启的虚拟机(VM)发起请求,并执行具体的操作。该操作可为计算事务(即CPU密集型任务)、数据接收或者转发或者数据查询(即IO密集型任务)、或者同时包含计算事务及数据接收的事务(即混合型任务)。申请人指出,本实施例中的“用户”既可以是一般意义上的终端服务或者应用的用户(Client),也可被理解为云平台或者与运行该多线程任务处理方法的电子设备(例如计算机***)的开发人员、管理员或者运维人员。
初始化阈值范围仅由线程池100根据宿主机300的指标数据予以确定,而当前阈值范围由线程池100仅根据对宿主机300执行轮询的前一个状态中宿主机300的指标数据予以确定。具体的,宿主机300的指标数据可仅由CPU开销予以定义或者仅由磁盘IOPS予以定义或者同时由CPU开销与磁盘IOPS予以共同定义,甚至还可由宿主机300的IO开销与前述CPU开销及磁盘IOPS予以共同定义。CPU开销及磁盘IOPS均为宿主机300的CPU及磁盘的指标数据。初始化阈值范围与下文所提及的当前阈值范围均是相对而言的;并且线程池100中的核心线程规模110(参图11所示)中所包含的核心线程的数量也是动态的。本实施例所涉及的宿主机300的CPU及磁盘即可为物理态的CPU及磁盘,也可为虚拟CPU或者虚拟磁盘。
当然,结合图3与图4所示,在初始化阶段为线程池100所设定的初始化阈值范围中包含四个核心线程,即核心线程101~核心线程104(构成当前状态中的核心线程规模),以及多个非核心线程,即非核心线程105、非核心线程106、非核心线程107、非核心线程108等(构成当前状态中的非核心线程规模)。因此,在对宿主机300的指标数据进行轮询操作时,线程池100中的核心线程规模及非核心线程规模是可能发生变化的。因此,在本实施例中,图3中的最小线程规模与最大线程规模也会随着下文中因接收到IO密集型任务的并发数及任务量而予以调整。当对宿主机300执行轮询操作所获得轮询数据认为线程池100中需要增加核心线程时,则由线程池100所内置的Thread Pool Executor(线程池管理器)新建一个核心线程,即图4中的核心线程110。同时,可将线程池100中的部分非核心线程予以销毁,并新建一个或者多个核心线程。
步骤S2、对输入线程池100的任务过滤出IO密集型任务。申请人指出,在本实施例中,无论是先执行步骤S1再执行步骤S2,还是先执行步骤S2再执行步骤S1,彼此的效果均是相同的。
对已经输入至线程池100的任务,由于任务还在执行中(即任务没有被回收),因此可在线程池100中配置用于不同任务类型的类型参数予以区分,以通过类型参数区分CPU密集型任务、IO密集型任务以及混合型任务。由于线程池100无法预知自客户端200处输入的任务是CPU密集型还是IO密集型任务或者同时包含前述两种任务的混合型任务,所以在加入线程池100中预先设置该任务的执行类型。
在本实施例中,可为每个输入线程池100中的任务增设下述任意一种类型参数:1)CPU密集型参数(默认设置);2)IO密集型参数;3)混合密集型参数。在任务加入线程池100时,为每个任务设置上述任意一种类型参数。任务加入线程池100之后,可根据每个任务所设置的类型参数以对输入线程池100的任务过滤出IO密集型任务来判断任务是否是IO密集型任务。
参图7所示,在本实施例中,对输入线程池100中的任务过滤出IO密集型任务具体如步骤S21至步骤S24所示,并可由实施例二中的任务过滤模块12执行。
步骤S21、待执行任务队列中的任务即将进入运行状态。
步骤S22、根据配置的类型参数确定任务是否为IO密集型任务;若否,则跳转执行步骤S23、继续将该任务加入线程池中,以在核心线程空闲时间时为该任务配置核心线程,以防止线程池100中数量有限的核心线程被CPU密集型任务或者混合型任务所长期占用;若是,则跳转执行步骤S24、将该任务放入IO密集型线程数队列中,并最终跳转执行步骤S3。
在云平台中,对数据库的访问操作、查询日志操作、查询缓存操作等IO密集型任务。因此,对从任务发起端21发起的各种任务如果不予以区分并过滤出IO密集型任务的话,则会导致宿主机300中的核心线程被闲置,从而造成核心线程的浪费。因此在本实施例中,对自客户端200下发的任务进行过滤,并仅将全部的IO密集型任务下发至云平台的一个或者多个宿主机300中,避免了IO密集型任务暂存在图3中的待执行任务队列中,以在单位时间内执行数量更多的IO密集型任务,从而提高了对宿主机300对IO密集型任务的及时响应。
然后,执行步骤S3、采用轮询方式获取宿主机300的指标数据,以确定线程池100的核心线程数是否触发调整初始化阈值范围以得到当前阈值范围的事件;其中,是否触发调整初始化阈值范围的事件基于宿主机300的指标数据予以确定,初始化阈值范围由核心线程数最大值与核心线程数最小值予以确定。定义出该初始化阈值范围的核心线程数最大值与核心线程数最小值可由管理员根据在宿主机300在配置时予以确定,也可线程池100对宿主机300在开始接收并处理IO密集型任务时先执行轮询操作,以确定宿主机300在初始状态中的指标数据,以根据步骤S2所揭示的技术方案确地初始化阈值范围的最大值与最小值,从而确定图5中由N个核心线程所定义出的初始化阈值范围所包含的核心线程N的具体数值。轮询方式获取宿主机300的指标数据的轮询间隔可选用超时时长(Keep Alive Time)。
在本实施例中,对线程池100中创建或者删除核心线程可采用Linux性能监控工具,例如Top工具(查看宿主的CPU开销)和/或vmstat工具(查看宿主机的内存或者虚拟内存)予以实现。安全阈值范围与初始化阈值范围及当前阈值范围互为相对概念,并根据对宿主机300的指标数据执行轮询操作后确定,并确定是否创建或者删除核心线程。
参图5所示,若初始化阈值范围中核心线程的最大值为N,则由于后续对核心线程所执行的创建或者删除所导致的核心线程数的增加或者减少所可能导致形成的N+P个核心线程,或者形成的N-M个核心线程。宿主机300的线程池100中所能创建的核心线程的最大值Q为固定值。同时,该初始化阈值范围核心线程的最小值S中至少一个核心线程,且核心线程数最小值S为整合个核心线程。
参图6所示,当前阈值范围在对宿主机300执行轮询操作并对当前阈值范围执行调整的各个阶段中所包含核心线程的数量并非一个固定值。同时,在本实施例中,该多线程任务处理方法还包括:对初始化阈值范围或者当前阈值范围设置安全阈值范围,所述安全阈值范围大于初始化阈值范围的最小值或者当前阈值范围的最小值且小于初始化阈值范围的最大值或者当前阈值范围的最大值。
具体而言,当前阈值范围包含N’个核心线程,其中,N’与前述N可以相等也可以不相等,且当前阈值范围的核心线程的最小值为S’,其中,S’与前述S可以相等也可以不相等。安全阈值范围由安全阈值范围的最小值(包含T个核心线程)及安全阈值范围的最大值(包含U个核心线程)共同定义。且T大于S’,U小于N’。同时,若初始化阈值范围中核心线程的最大值为N’,则由于后续对核心线程所执行的创建或者删除所导致的核心线程数的增加或者减少所可能导致形成的N’+P’个核心线程,或者形成的N’-M’个核心线程。宿主机300的线程池100中所能创建的核心线程的最大值Q为固定值。需要说明的是,基于不同轮询操作所对应的当前阈值范围及当前阈值范围所对应的安全阈值范围互为相对概念,其所包含的核心线程的最大值及最小值也可以相同,也可以是不相同。通过上述技术方案,能够有效地防止核心线程由于被频繁创建或者撤销所导致的不必要的计算开销。同时,由于安全阈值范围所包含的核心线程数的最小值大于初始化阈值范围的最小值或者当前阈值范围的最小值,因此能够防止线程池100因盲目的删除核心线程所导致的核心线程规模111无法适应一段时间内IO密集型任务的缺陷,保证核心线程规模111的稳定性与容忍度。
在本实施例中,采用轮询方式获取宿主机300的指标数据后判断线程池中是否存在响应IO密集型任务所匹配的核心线程;
若是,则不更改初始化阈值范围或者当前阈值范围;
若否,则基于宿主机300的指标数据予以确定初始化阈值范围或者当前阈值范围的调节趋势(即图5或者图6中向左的“减少”箭头或者向右的“增加”箭头),其中调节趋势为增加核心线程数或者减少核心线程数。
参图7所示,核心线程使用饱和策略响应由线程池100所接收的自外部发起的多线程任务的访问请求,所述饱和策略由线程池100下发。访问请求由用户在任务发起端21中发起。下文对饱和策略及多线程任务处理方法予以详细阐述。
开始。
步骤401、获取宿主机指标数据。
步骤402、设置核心线程数的初始化阈值。
步骤403、过滤出IO密集型任务。
步骤404、判断核心线程数是否已满。步骤404中的判断操作可由线程池100执行,也可由宿主机30执行。通过执行该步骤404可以确定在初始化阈值范围所确定的核心线程的数量是否全部被占用,以执行IO密集型任务的处理操作。若是,则调转执行步骤406;若否,则证明在此时刻的核心线程规模111中的仍然可以创建新的核心线程以执行IO密集型任务的处理操作,因此跳转执行步骤405、创建核心线程并执行任务。
步骤406、判断是否触发调整初始化阈值事件。步骤406中的判断操作可由程池100执行,也可由宿主机30执行。通过执行该步骤406,可根据当前状态中核心线程规模111所包含的核心线程是否满足当前执行IO密集型任务的处理操作的需求。若是,则跳转执行步骤405;若否,则跳转执行步骤405(参上文所述)。
步骤407、判断核心线程数是否达到安全阈值范围,若是,则跳转执行步骤408;若否,则跳转执行步骤405(参上文所述)。步骤407中的操作可由线程池100执行,也可由图10中的阈值调整模块14执行。需要说明的是,在本实施例中,在步骤407与步骤406之间还隐含了对初始化阈值范围或者当前阈值范围设置安全阈值范围的步骤,其中,对初始化阈值范围设置安全阈值范围的操作,以及对当前阈值范围设置安全阈值范围的操作均由阈值调整模块14执行,从而在下一个周期的轮询操作获取对宿主机300的指标数据后,决定是否需要对初始化阈值范围及当前阈值范围设置安全阈值范围。
步骤408、判断待执行任务队列是否被全部占用,若是,则跳转执行步骤409;若否,则跳转执行步骤405(参上文所述)。
步骤409、使用***垃圾回收机制释放部分核心线程;例如,可利用JVM执行核心线程释放操作。
在线程池100中的核心线程被回收的条件:当线程池100中的线程数量大于核心线程数量的时候,如果这时没有新的任务(即IO密集型任务)提交,核心线程外的非核心线程不会立即销毁,而是执行等待,直到等待时间超过Keep Alive Time。如果等待时间超过设置的Keep Alive Time,该核心线程会被回收或者销毁(即死亡)。Keep Alive Time为线程池100的属性之一,并可基于该Keep Alive Time实现对核心线程的回收策略,例如当KeepAlive Time=0,只要核心线程空闲会立即回收核心线程从而节约资源。
核心线程的正常生命周期的具体执行流程参图9所示,回收线程的生命周期的具体执行流程参图10所示。图9与图10中的“死亡”是指核心线程的销毁或者回收。
如图9所示,新建核心线程并进入就绪状态,一旦核心线程进入就绪状态,则证明该核心线程已经做好了准备,随时等待CPU(处理器)调度执行。核心线程在得到处理器的资源后开始运行IO密集型任务,并开始运行。一旦进入运行状态,则此时的CPU(处理器)开始调度处于就绪状态的核心线程中。当IO密集型任务被执行完毕后,该核心线程死亡。在核心线程处于运行状态时,一旦失去处理器的资源,则导致该核心线程重新返回至就绪状态,并等待重新获取处理器的资源。处于运行状态中的线程由于某种原因,暂时放弃对CPU的使用权,停止执行,此时进入阻塞状态。处于阻塞状态的核心线程需要重新激活,直到其进入到就绪状态,才可再次被CPU调用以进入到运行状态。
如图10所示,在执行对核心线程的回收操作过程中,当某个或者某些核心线程进入就绪状态时,如果当前状态中的线程池100中的线程数量(包括核心线程与非核心线程的数量)大于核心线程数量的时候,并且核心线程的等待时间超过Keep Alive Time时,直接杀死处于就绪状态的核心线程,并最终导致该核心线程死亡。
结束。
通过本实施例所揭示的一种多线程任务处理方法,不仅提高了核心线程对多任务的响应能力,提高了基于线程池100对IO密集型任务的响应能力,并能够有效地防止核心线程由于被频繁创建或者撤销所导致的不必要的计算开销,同时提高了云平台或者数据库***运行的稳定性。同时,由于不需要为下发的任务设置优先级,因此基于本实施例所揭示的技术方案,不会导致为IO密集型任务分配核心线程所导致的任务分配不均匀的技术问题。
实施例二:
基于实施例一所揭示的技术方案,本实施例还揭示了一种多线程任务处理装置。多线程任务处理装置响应于客户端200,并用于实现并运行实施例一所揭示的一种多线程任务处理方法。
配合参照图2至图4以及图11所示,在本实施例中,该多线程任务处理装置包括:初始化模块11,为线程池100的核心线程数设置初始化阈值范围;任务过滤模块12,对输入线程池100的任务过滤出IO密集型任务;轮询模块13,采用轮询方式获取宿主机300的指标数据,以确定线程池100的核心线程数是否触发调整初始化阈值范围以得到当前阈值范围的事件。线程池100可运行于计算机内存、JVM(Java虚拟机)或者宿主机300中。阈值调整模块14,基于宿主机300的指标数据确定是否触发调整初始化阈值范围的事件予以确定,所述初始化阈值范围由核心线程数最大值与核心线程数最小值予以确定。
任务过滤模块12过滤出IO密集型任务的规格后,通知初始化模块11,以由初始化模块11对线程池100配置出与初始状态下或者当前状态中的核心线程规模111所包含的核心线程的数量。此处的“规格”是指IO密集型任务的数量。
轮询模块13采用轮询方式获取宿主机300的指标数据后判断线程池100中是否存在响应IO密集型任务所匹配的核心线程;若是,则不更改初始化阈值范围或者当前阈值范围;若否,则基于宿主机300的指标数据予以确定初始化阈值范围或者当前阈值范围的调节趋势,其中调节趋势为增加核心线程数或者减少核心线程数。轮询模块13向宿主机300发起轮询操作,并由宿主机300向轮询模块13返回轮询数据,轮询模块13将轮询数据发送至阈值调整模块14,以由阈值调整模块14执行调整初始化阈值范围以得到当前阈值范围的操作,或者对初始化阈值范围及当前阈值范围设置安全阈值范围的操作。
优选的,在本实施例中,该多线程任务处理装置还可配置阈值调整模块14,基于宿主机300的指标数据确定是否触发调整初始化阈值范围的事件予以确定,所述初始化阈值范围由核心线程数最大值与核心线程数最小值予以确定,该部分技术方案可配合参照实施例一所述。
初始化阈值范围仅由线程池100根据宿主机300的指标数据予以确定,所述当前阈值范围由线程池100仅根据对宿主机300执行轮询的前一个状态中宿主机300的指标数据予以确定。宿主机300的指标数据至少由CPU开销和/或磁盘IOPS予以定义。基于阈值调整模块14对初始化阈值范围或者当前阈值范围设置安全阈值范围,所述安全阈值范围大于初始化阈值范围的最小值或者当前阈值范围的最小值且小于初始化阈值范围的最大值或者当前阈值范围的最大值,该部分技术方案可配合参照实施例一所述。
初始化模块11、任务过滤模块12、轮询模块13及阈值调整模块14均可以可执行程序的形式部署于宿主机300中或者创建于宿主机300中的一个或多个虚拟机(未示出)中。若线程池100中的核心线程规模111满了,则将IO密集型任务放入待执行任务队列中,当IO密集型任务所需要的核心线程超出宿主机300所可能创建的数量最大的核心线程(即图5或者图6中的核心线程数最大值Q)时,会进入拒绝Rejected Execution。
本实施例所揭示的多线程任务处理装置与实施例一中相同部分的技术方案,请参实施例一所述,在此不再赘述。
实施例三:
结合图12所述,本申请还揭示了一种电子设备500,其包括:处理器51,由至少一个存储单元组成的存储装置52,以及在处理器51与存储装置52之间建立通信连接的通信总线53。处理器51用于执行存储装置52中存储的一个或者多个程序,以实现如实施例一所揭示的多线程任务处理方法。
具体的,该存储装置52可由存储单元521~存储单元52j所组成,其中,参数j取大于或者等于1的正整数。处理器51可为ASIC、FPGA、CPU、MCU或者其他具有指令处理功能的物理硬件或者虚拟设备。通信总线53的形式并不需要予以具体限定,I2C总线、SPI总线、SCI总线、PCI总线、PCI-E总线、ISA总线等,并可根据电子设备500的具体类型及应用场景需求予以合理变更。通信总线53并非本申请发明点,故在本申请中不予展开陈述。
存储装置52可基于Ceph或者GlusterFS等分布式文件***,也可为RAID0~RAID7磁盘阵列,也可被配置为一块或者多块硬盘或者可移动存储装置、数据库服务器、SSD(Solid-state Disk)、NAS存储***或者SAN存储***组成。具体的,在本实施例中,该电子设备500可被配置为超融合一体机、计算机、服务器、数据中心、虚拟集群、便携式移动终端、Web***、金融支付平台或者ERP***,以及虚拟在线支付平台/***等;其中,超融合一体机是一种高性能多节点服务器,主要是分布式存储和服务器虚拟化技术,把计算节点、存储资源、网络交换高度集成到一台1U、2U或者4U服务器中,给企业或者终端用户提供超融合基础架构设施,以全面提升企业的IT能力。
尤其的,本实施例所揭示的电子设备500可基于实施例一所揭示的多线程任务处理方法或者包含一个或者多个实施例二所示出的多线程任务处理装置,对基于用户在客户端200中发起的访问请求或者操作所对应的一个任务或者多个并行任务予以可靠响应,尤其是在对实时性及安全性要求非常严苛的场景,例如购物网站的在线支付***、金融机构的结算***、电子购票***等场景中,该电子设备500具有极其重要的技术应用价值。
本实施例所揭示的电子设备500可被理解为具有物理形态的实体设备(例如POS机、自动取款机),也可被理解为运行有如实施例一所揭示的多线程任务处理方法的软件***(财务***或者ERP***)或者一种互联网在线应用(APP软件),甚至可以通过光纤或者网线互联的两台或者多台组成直连拓扑结构或者树形拓扑结构或者星型拓扑结构的计算机***/数据中心。本实施例所揭示的电子设备500与实施例一和/或实施例二中相同部分的技术方案,请参实施例一和/或实施例二所述,在此不再赘述。
上文所列出的一系列的详细说明仅仅是针对本发明的可行性实施方式的具体说明,它们并非用以限制本发明的保护范围,凡未脱离本发明技艺精神所作的等效实施方式或变更均应包含在本发明的保护范围之内。
对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化囊括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。
此外,应当理解,虽然本说明书按照实施方式加以描述,但并非每个实施方式仅包含一个独立的技术方案,说明书的这种叙述方式仅仅是为清楚起见,本领域技术人员应当将说明书作为一个整体,各实施例中的技术方案也可以经适当组合,形成本领域技术人员可以理解的其他实施方式。

Claims (12)

1.一种多线程任务处理方法,其特征在于,包括:
为线程池的核心线程数设置初始化阈值范围;
对输入线程池的任务过滤出IO密集型任务;
采用轮询方式获取宿主机的指标数据,确定是否创建或者删除核心线程,以确定线程池的核心线程数是否触发调整初始化阈值范围以得到当前阈值范围的事件;
其中,是否触发调整初始化阈值范围的事件基于宿主机的指标数据予以确定,所述初始化阈值范围由核心线程数最大值与核心线程数最小值予以确定。
2.根据权利要求1所述的多线程任务处理方法,其特征在于,所述初始化阈值范围仅由线程池根据宿主机的指标数据予以确定,所述当前阈值范围由线程池仅根据对宿主机执行轮询的前一个状态中宿主机的指标数据予以确定。
3.根据权利要求1所述的多线程任务处理方法,其特征在于,所述核心线程使用饱和策略响应由线程池所接收的自外部发起的多线程任务的访问请求,所述饱和策略由线程池下发。
4.根据权利要求1至3中任一项所述的多线程任务处理方法,所述宿主机的指标数据至少由CPU开销和/或磁盘IOPS予以定义。
5.根据权利要求4所述的多线程任务处理方法,其特征在于,采用轮询方式获取宿主机的指标数据后判断线程池中是否存在响应IO密集型任务所匹配的核心线程;
若是,则不更改初始化阈值范围或者当前阈值范围;
若否,则基于宿主机的指标数据予以确定初始化阈值范围或者当前阈值范围的调节趋势,其中调节趋势为增加核心线程数或者减少核心线程数。
6.根据权利要求4所述的多线程任务处理方法,其特征在于,所述多线程任务处理方法还包括:对初始化阈值范围或者当前阈值范围设置安全阈值范围,所述安全阈值范围大于初始化阈值范围的最小值或者当前阈值范围的最小值且小于初始化阈值范围的最大值或者当前阈值范围的最大值。
7.一种多线程任务处理装置,其特征在于,包括:
初始化模块,为线程池的核心线程数设置初始化阈值范围;
任务过滤模块,对输入线程池的任务过滤出IO密集型任务;
轮询模块,采用轮询方式获取宿主机的指标数据,确定是否创建或者删除核心线程,以确定线程池的核心线程数是否触发调整初始化阈值范围以得到当前阈值范围的事件;
阈值调整模块,基于宿主机的指标数据确定是否触发调整初始化阈值范围的事件予以确定,所述初始化阈值范围由核心线程数最大值与核心线程数最小值予以确定。
8.根据权利要求7所述的多线程任务处理装置,其特征在于,所述初始化阈值范围仅由线程池根据宿主机的指标数据予以确定,所述当前阈值范围由线程池仅根据对宿主机执行轮询的前一个状态中宿主机的指标数据予以确定。
9.根据权利要求7所述的多线程任务处理装置,其特征在于,所述宿主机的指标数据至少由CPU开销和/或磁盘IOPS予以定义。
10.根据权利要求7所述的多线程任务处理装置,其特征在于,基于所述阈值调整模块对初始化阈值范围或者当前阈值范围设置安全阈值范围,所述安全阈值范围大于初始化阈值范围的最小值或者当前阈值范围的最小值且小于初始化阈值范围的最大值或者当前阈值范围的最大值。
11.一种电子设备,其特征在于,包括:
处理器,由至少一个存储单元组成的存储装置,以及
在处理器与存储装置之间建立通信连接的通信总线;
所述处理器用于执行存储装置中存储的一个或者多个程序,以实现如权利要求1至6中任一项所述的多线程任务处理方法。
12.根据权利要求11所述的电子设备,其特征在于,所述电子设备至少被配置为计算机、服务器、数据中心、虚拟集群、便携式移动终端、金融支付平台或者ERP***。
CN202010946007.8A 2020-09-10 2020-09-10 一种多线程任务处理方法、装置及电子设备 Active CN112000455B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010946007.8A CN112000455B (zh) 2020-09-10 2020-09-10 一种多线程任务处理方法、装置及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010946007.8A CN112000455B (zh) 2020-09-10 2020-09-10 一种多线程任务处理方法、装置及电子设备

Publications (2)

Publication Number Publication Date
CN112000455A CN112000455A (zh) 2020-11-27
CN112000455B true CN112000455B (zh) 2022-02-01

Family

ID=73468548

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010946007.8A Active CN112000455B (zh) 2020-09-10 2020-09-10 一种多线程任务处理方法、装置及电子设备

Country Status (1)

Country Link
CN (1) CN112000455B (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112817719A (zh) * 2021-01-28 2021-05-18 平安普惠企业管理有限公司 线程池的参数调整方法、装置、设备及可读存储介质
CN113010286A (zh) * 2021-03-12 2021-06-22 京东数字科技控股股份有限公司 并行任务调度方法、装置、计算机设备和存储介质
CN113051051B (zh) * 2021-03-12 2024-02-27 北京百度网讯科技有限公司 视频设备的调度方法、装置、设备及存储介质
CN113064620A (zh) * 2021-04-02 2021-07-02 北京天空卫士网络安全技术有限公司 一种处理***数据的方法和装置
CN113553152A (zh) * 2021-07-20 2021-10-26 中国工商银行股份有限公司 作业调度方法及装置
CN113590285A (zh) * 2021-07-23 2021-11-02 上海万物新生环保科技集团有限公司 一种用于线程池参数动态设置的方法、***及设备
CN114422498A (zh) * 2021-12-14 2022-04-29 杭州安恒信息技术股份有限公司 大数据实时处理方法、***、计算机设备及存储介质
CN115878664B (zh) * 2022-11-24 2023-07-18 灵犀科技有限公司 一种海量输入数据的实时查询匹配的方法及***

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104461845A (zh) * 2014-11-17 2015-03-25 中国航天科工集团第二研究院七〇六所 日志采集***线池自适应方法
CN111488255A (zh) * 2020-03-27 2020-08-04 深圳壹账通智能科技有限公司 多线程并发监控方法、装置、设备及存储介质

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9921870B2 (en) * 2014-09-25 2018-03-20 Oracle International Corporation System and method for supporting a scalable thread pool in a distributed data grid
US10073718B2 (en) * 2016-01-15 2018-09-11 Intel Corporation Systems, methods and devices for determining work placement on processor cores
US10445141B2 (en) * 2016-08-18 2019-10-15 Honeywell International Inc. System and method supporting single software code base using actor/director model separation
CN108681481B (zh) * 2018-03-13 2021-10-15 创新先进技术有限公司 业务请求的处理方法及装置
CN110837401A (zh) * 2018-08-16 2020-02-25 苏宁易购集团股份有限公司 一种java线程池分级处理方法和装置
CN109710400A (zh) * 2018-12-17 2019-05-03 平安普惠企业管理有限公司 线程资源分组的方法及装置
CN111142943A (zh) * 2019-12-27 2020-05-12 中国银行股份有限公司 自动控制并发方法及装置

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104461845A (zh) * 2014-11-17 2015-03-25 中国航天科工集团第二研究院七〇六所 日志采集***线池自适应方法
CN111488255A (zh) * 2020-03-27 2020-08-04 深圳壹账通智能科技有限公司 多线程并发监控方法、装置、设备及存储介质

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
"Simultaneous and Speculative Thread Migration for Improving Energy Efficiency of Heterogeneous Core Architectures";Changmin Lee;《IEEE Transaction on Computers》;20171107;第67卷(第99期);第498-512页 *
"一种面向片上众核处理器的虚拟核资源分配算法";沈阳;《华南理工大学学报》;20180115;第46卷(第01期);第112-121页 *

Also Published As

Publication number Publication date
CN112000455A (zh) 2020-11-27

Similar Documents

Publication Publication Date Title
CN112000455B (zh) 一种多线程任务处理方法、装置及电子设备
US10545789B2 (en) Task scheduling for highly concurrent analytical and transaction workloads
US10191772B2 (en) Dynamic resource configuration based on context
US9727372B2 (en) Scheduling computer jobs for execution
CA3000422C (en) Workflow service using state transfer
US9507631B2 (en) Migrating a running, preempted workload in a grid computing system
US8424007B1 (en) Prioritizing tasks from virtual machines
JP5653151B2 (ja) クラウドコンピューティングシステム、クラウドコンピューティングシステムの制御方法、および管理アプリケーション
US20170017511A1 (en) Method for memory management in virtual machines, and corresponding system and computer program product
US20200389416A1 (en) Checkpoint-inclusive resource allocation
US11822454B2 (en) Mitigating slow instances in large-scale streaming pipelines
US20240015068A1 (en) Method and system for virtual server dormancy
CN114968567A (zh) 用于分配计算节点的计算资源的方法、装置和介质
US11204810B2 (en) Job concentration system, method and process
CN113986523A (zh) 一种Flink***资源分配优化方法、***、设备及介质
US20240061714A1 (en) System and method for managing cloud service resources in a cloud computing environment
CN115061779A (zh) 一种用户态虚拟机的内核锁管理方法及装置
CN116303132A (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
GR01 Patent grant