CN110908794A - 基于任务窃取算法的任务窃取方法及系统 - Google Patents
基于任务窃取算法的任务窃取方法及系统 Download PDFInfo
- Publication number
- CN110908794A CN110908794A CN201910954294.4A CN201910954294A CN110908794A CN 110908794 A CN110908794 A CN 110908794A CN 201910954294 A CN201910954294 A CN 201910954294A CN 110908794 A CN110908794 A CN 110908794A
- Authority
- CN
- China
- Prior art keywords
- thread
- task
- queue
- stealing
- state
- 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
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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5083—Techniques for rebalancing the load in a distributed system
- G06F9/5088—Techniques for rebalancing the load in a distributed system involving task migration
-
- 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
本发明提供了一种基于任务窃取算法的任务窃取方法及系统,包括:步骤1:将系统中的各个线程按编号从小到大排列形成队列,并且队列首尾相连形成一个环;步骤2:针对当前线程,判断下一个线程的状态;若处于过载状态,则从过载线程的任务列队中窃取计算任务,若处于正常状态,则执行步骤A;步骤3:在本地执行步骤2窃取的计算任务,然后执行步骤2,继续查看过载线程的下一个线程的状态;步骤A:判断本地队列是否存在排队等待的计算任务,若列队非空,则执行当前线程列队中的计算任务;若列队为空,则完成了一次Ring Stealing过程。本发明可以让一个正常状态的线程分担多个过载线程的负载压力,减小请求的延时。
Description
技术领域
本发明涉及多线程负载均衡领域,具体地,涉及一种基于任务窃取算法的任务窃取方法及系统,尤其涉及一种面向低时延高并发多线程系统的基于Work Stealing的任务窃取算法。
背景技术
由于单个CPU核心性能提升有着严重的瓶颈问题,所以越来越多的系统开始使用多个线程并行计算的方式来提高系统的并发处理能力。这一类高并发的请求处理系统通常会不断地接收到新的请求,请求会存储在任务队列中。每个请求其实就是一个计算任务,计算任务之间相互独立。系统一般由多个线程组成,每个线程都配有一个任务队列,各个线程从自己的任务队列中拿取请求,线程之间并行执行计算任务,从而提高系统的吞吐量。
在这种高并发的请求处理系统中,一开始各个队列中的计算任务数量接近,各个队列的长度比较均衡。但当某个线程开始处理一个复杂计算任务之后,由于一个复杂计算任务的处理时间可以达到普通计算任务的几百倍甚至上千倍,导致该线程队列里的计算任务迅速堆积,该线程的负载严重过载,其队列中还在排队等待的计算任务的延时被放大了几十倍甚至上百倍。
这种高并发的处理系统一般都是实时面向用户的,因此通常这类系统需要在高并发地执行计算任务的同时保证系统可以低时延地响应客户端的请求,因此需要一种负载均衡机制来解决由于复杂计算任务堵塞线程导致的队列中的普通任务延时过高的问题。
Work stealing技术是一种广为应用的均衡各个线程负载的调度策略。传统的Work stealing策略下,当某个线程执行完自己任务队列中所有的计算任务之后,会去查看其它线程的任务队列,并从其他线程的任务队列中窃取计算任务,拿到本地代为执行,从而均衡各个线程之间的负载压力。
例如线程A的任务队列有100个计算任务在等待执行,而线程B的任务队列中堆积了2000个计算任务,此时线程之间的负载严重不均衡。倘若采用了Work Stealing技术,那么当线程A处理完自己队列中所有的计算任务后,会去窃取线程B任务队列里的计算任务,从而达到分担线程B负载压力的效果。
但是在传统的Work Stealing技术下,线程只有在处理完自己任务队列中所有的计算任务之后才会触发Stealing行为,去窃取别的线程任务队列里的计算任务。而高并发的请求处理系统通常需要24小时不间断接收客户端的请求,各个线程的任务队列在绝大部分情况下不会为空,线程A处理完10个计算任务之后,又会接收到新的8个请求,则任务队列中又增加了8个计算任务。因此,在高并发的场景下,线程A的任务队列几乎不会出现为空的情况,甚至在客户端高并发地发送请求的情况下可能会堆积到150个计算任务。因此,传统的Work Stealing机制几乎不会触发,无法解决高并发的请求处理系统中某些请求由于被复杂计算任务堵塞导致的高延时问题。
传统Work Stealing技术只有在任务队列为空时才会窃取计算任务,而在高并发的请求处理系统中很少出现某个线程任务队列为空的情况,因此传统的Work Stealing算法(任务窃取算法)在高并发的系统中负载均衡效果很差。在并行计算领域,Work Stealing算法是一种针对多线程程序的任务调度策略。
针对传统Work Stealing技术在高并发的请求处理系统中的缺陷,本发明放宽了传统Work Stealing算法中Stealing行为的触发条件,改进并设计了1种新的Stealing算法,从而达到较好地均衡高并发的请求处理系统中各个线程负载压力的效果。
发明内容
针对现有技术中的缺陷,本发明的目的是提供一种基于任务窃取算法的任务窃取方法及系统。
根据本发明提供的一种基于任务窃取算法的任务窃取方法,包括:
步骤1:将高并发的请求处理系统中的各个线程按编号从小到大排列形成队列,并且队列首尾相连形成一个环;
步骤2:针对当前线程,判断下一个线程的状态;若处于过载状态,执行步骤3,若处于正常状态,则执行步骤A;
步骤3:根据步骤2判断的线程状态,当处于过载状态时,从过载线程的任务列队中窃取计算任务;
步骤4:在本地执行步骤3窃取的计算任务,然后执行步骤2,继续查看过载线程的下一个线程的状态;
步骤A:判断本地队列是否存在排队等待的计算任务,若列队非空,则执行步骤B;若列队为空,则完成了一次Ring Stealing过程;所述Ring Stealing过程指任务窃取过程;
步骤B:执行当前线程列队中的计算任务。
优选地,所述步骤2中过载状态包括:
若线程处理当前计算任务的时间大于等于时间阈值,则认为线程目前被复杂计算任务堵塞,处于过载状态;
若线程处理当前计算任务的时间小于时间阈值,则认为线程处于正常状态。
优选地,所述步骤3包括通过Stealing工作线程从过载线程的队列首部窃取计算任务;
所述步骤4包括:通过Stealing线程在本地执行窃取的计算任务。
优选地,所述步骤A包括:通过Stealing线程判断本地的计算任务队列是否为空,若任务队列非空,则进入步骤B继续执行,若任务队列为空,则完成了一次的Ring Stealing的过程。
优选地,在高并发的请求处理系统中,每个线程并行执行计算任务,且线程均会轮询触发Ring Stealing过程。
根据本发明提供的一种基于任务窃取算法的任务窃取系统,包括:
模块M1:将系统中的各个线程按编号从小到大排列形成队列,并且队列首尾相连形成一个环;
模块M2:针对当前线程,判断下一个线程的状态;若处于过载状态,触发模块M3执行,若处于正常状态,则触发模块N1执行;
模块M3:根据模块M2判断的线程状态,当处于过载状态时,从过载线程的任务列队中窃取计算任务;
模块M4:在本地执行模块M3窃取的计算任务,然后触发模块M2执行,继续查看过载线程的下一个线程的状态;
模块N1:判断本地队列是否存在排队等待的计算任务,若列队非空,则触发模块N2执行;若列队为空,则完成了一次Ring Stealing过程;
模块N2:执行当前线程列队中的计算任务。
优选地,所述模块M2中过载状态包括:
若线程处理当前计算任务的时间大于等于时间阈值,则认为线程目前被复杂计算任务堵塞,处于过载状态;
若线程处理当前计算任务的时间小于时间阈值,则认为线程处于正常状态。
优选地,所述模块M3包括通过Stealing线程从过载线程的队列首部窃取计算任务;
所述模块M4包括:通过Stealing线程在本地执行窃取的计算任务。
优选地,所述模块N1包括:通过Stealing线程判断本地的计算任务队列是否为空,若任务队列非空,则调用模块N2,若任务队列为空,则完成了一次的Ring Stealing的过程。
优选地,在高并发的请求处理系统中,每个线程并行执行计算任务,且线程均会轮询触发Ring Stealing过程。
与现有技术相比,本发明具有如下的有益效果:
1、Ring Stealing技术改变了Stealing的触发条件,定义了过载线程和正常线程,从而在高并发的系统中也能频繁触发Stealing行为,让正常状态的线程有效地为过载线程分担负载压力;
2、Ring Stealing技术会动态匹配需要帮助的线程,当系统处于较大负载下时,例如超过一半的线程都处于过载状态时,Ring Stealing技术可以让一个正常状态的线程分担多个过载线程的负载压力,减小请求的延时。
附图说明
通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1为一种基于Work Stealing算法的任务窃取方法流程示意图
具体实施方式
下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。
根据本发明提供的一种基于任务窃取算法的任务窃取方法,包括:
步骤1:将高并发的请求处理系统中的各个线程按编号从小到大排列形成队列,并且队列首尾相连形成一个环;
步骤2:针对当前线程,判断下一个线程的状态;若处于过载状态,执行步骤3,若处于正常状态,则执行步骤A;
步骤3:根据步骤2判断的线程状态,当处于过载状态时,从过载线程的任务列队中窃取计算任务;
步骤4:在本地执行步骤3窃取的计算任务,然后执行步骤2,继续查看过载线程的下一个线程的状态;
步骤A:判断本地队列是否存在排队等待的计算任务,若列队非空,则执行步骤B;若列队为空,则完成了一次Ring Stealing过程;所述Ring Stealing过程指任务窃取过程;
步骤B:执行当前线程列队中的计算任务。
具体地,所述步骤2中过载状态包括:
若线程处理当前计算任务的时间大于等于时间阈值,则认为线程目前被复杂计算任务堵塞,处于过载状态;
若线程处理当前计算任务的时间小于时间阈值,则认为线程处于正常状态。
具体地,所述步骤3包括通过Stealing工作线程从过载线程的队列首部窃取计算任务;
所述步骤4包括:通过Stealing线程在本地执行窃取的计算任务。
具体地,所述步骤A包括:通过Stealing线程判断本地的计算任务队列是否为空,若任务队列非空,则进入步骤B继续执行,若任务队列为空,则完成了一次的Ring Stealing的过程。
具体地,在高并发的请求处理系统中,每个线程并行执行计算任务,且线程均会轮询触发Ring Stealing过程。
根据本发明提供的一种基于任务窃取算法的任务窃取系统,包括:
模块M1:将系统中的各个线程按编号从小到大排列形成队列,并且队列首尾相连形成一个环;
模块M2:针对当前线程,判断下一个线程的状态;若处于过载状态,触发模块M3执行,若处于正常状态,则触发模块N1执行;
模块M3:根据模块M2判断的线程状态,当处于过载状态时,从过载线程的任务列队中窃取计算任务;
模块M4:在本地执行模块M3窃取的计算任务,然后触发模块M2执行,继续查看过载线程的下一个线程的状态;
模块N1:判断本地队列是否存在排队等待的计算任务,若列队非空,则触发模块N2执行;若列队为空,则完成了一次Ring Stealing过程;
模块N2:执行当前线程列队中的计算任务。
具体地,所述模块M2中过载状态包括:
若线程处理当前计算任务的时间大于等于时间阈值,则认为线程目前被复杂计算任务堵塞,处于过载状态;
若线程处理当前计算任务的时间小于时间阈值,则认为线程处于正常状态。
具体地,所述模块M3包括通过Stealing线程从过载线程的队列首部窃取计算任务;
所述模块M4包括:通过Stealing线程在本地执行窃取的计算任务。
具体地,所述模块N1包括:通过Stealing线程判断本地的计算任务队列是否为空,若任务队列非空,则调用模块N2,若任务队列为空,则完成了一次的Ring Stealing的过程。
具体地,在高并发的请求处理系统中,每个线程并行执行计算任务,且线程均会轮询触发Ring Stealing过程。
下面通过优选例,对本发明进行更为具体地说明。
优选例1:
根据本发明提供的一种基于Work Stealing算法的任务窃取方法,包括:
一种适用于低时延高并发的请求处理系统的名为Ring Stealing的多线程负载均衡技术,该技术下,系统中的各个线程按编号从小到大排列,并且首尾相连形成一个环。在系统运行时每个线程会动态地查看下一个线程的工作状态,若发现下一个线程处于过载状态时,则为过载线程分担负载压力,从而达到均衡多个线程负载压力的效果。在为过载线程分担负载的同时,该线程还会额外去查看过载线程的下一个线程的工作状态,即下下个线程的工作状态,若其处于正常状态则停止查找,若其也处于过载状态则同时分担2个过载线程的压力并且继续查看下一个线程。当多个相邻线程均处于过载状态时,该技术可以让一个线程分担多个线程的负载。所述的多线程负载均衡包括以下步骤:
步骤1:将系统中的各个线程按编号从小到大排列形成队列,并且队列首尾相连形成一个环;
具体地,所述系统中的各个线程收尾相连形成一个环,编号为最后一个的线程将会判断编号为第一个的线程的状态。
步骤2:针对当前线程,判断下一个线程的状态;若处于过载状态,执行步骤3,若处于正常状态,则执行步骤A;
具体地,当前线程的next指针一开始指向自己,next变量的值会加1,从而指向下一个线程;
更为具体地,所述步骤2中过载状态包括:
通过比较处理当前计算任务已经花费的时间和时间阈值10ms的大小来判断该线程是否处于过载状态;
若线程处理当前计算任务的时间大于等于时间阈值10ms,则认为线程目前被复杂计算任务堵塞,处于过载状态;
若线程处理当前计算任务的时间小于时间阈值10ms,则认为线程处于正常状态。
步骤3:根据步骤2判断的线程状态,当处于过载状态时,从过载线程的任务列队中窃取计算任务;
具体地,所述步骤3包括通过Stealing线程从过载线程的队列首部窃取计算任务;
更为具体地,所述的步骤3包括Stealing线程会将过载线程队列首部的任务从其队列中移出,然后由Stealing线程解析任务中的查询请求,待计算出查询结果后由Stealing线程将结果返回给客户端,事实上,客户端只关心查询结果,不关心是由哪个线程计算得出的。
步骤4:在本地执行步骤3窃取的计算任务,分担过载线程的计算压力,然后执行步骤2,继续查看过载线程的下一个线程的状态;
具体地,所述步骤4包括:通过Stealing线程在本地执行窃取的计算任务。
步骤A:判断本地队列是否存在排队等待的计算任务,若列队非空,则执行步骤B;若列队为空,则完成了一次Ring Stealing过程;
具体地,所述步骤A包括:通过Stealing线程判断本地的计算任务队列是否为空,若任务队列非空,则执行本地任务队列中的计算任务,若任务队列为空,则完成了一次的Ring Stealing的过程。
步骤B:执行当前线程列队中的计算任务。
具体地,在高并发的请求处理系统中,每个线程并行执行计算任务,且线程均会轮询触发Ring Stealing过程,从而达到均衡各个线程之间负载压力的效果。
高并发的请求处理系统采用客户机/服务器(C/S)模式,由多个客户端高并发地往服务器端发送请求,服务器端将请求存储在任务队列中,每个线程各自配有一个任务队列,请求会随机分配到某个线程的任务队列中,各个线程并行执行队列中的计算任务。
根据本发明提供的一种基于Work Stealing算法的任务窃取系统,包括:
模块M1:将系统中的各个线程按编号从小到大排列形成队列,并且队列首尾相连形成一个环;
具体地,所述系统中的各个线程收尾相连形成一个环,编号为最后一个的线程将会判断编号为第一个的线程的状态。
模块M2:针对当前线程,判断下一个线程的状态;若处于过载状态,触发模块M3执行,若处于正常状态,则触发模块N1执行;
具体地,当前线程的next指针一开始指向自己,next变量的值会加1,从而指向下一个线程;
更为具体地,所述模块M2中过载状态包括:
通过比较处理当前计算任务已经花费的时间和时间阈值10ms的大小来判断该线程是否处于过载状态;
若线程处理当前计算任务的时间大于等于时间阈值10ms,则认为线程目前被复杂计算任务堵塞,处于过载状态;
若线程处理当前计算任务的时间小于时间阈值10ms,则认为线程处于正常状态。
模块M3:根据模块M2判断的线程状态,当处于过载状态时,从过载线程的任务列队中窃取计算任务;
具体地,所述模块M3包括通过Stealing线程从过载线程的队列首部窃取计算任务;
更为具体地,所述的模块M3包括Stealing线程会将过载线程队列首部的任务从其队列中移出,然后由Stealing线程解析任务中的查询请求,待计算出查询结果后由Stealing线程将结果返回给客户端,事实上,客户端只关心查询结果,不关心是由哪个线程计算得出的。
模块M4:在本地执行模块M3窃取的计算任务,分担过载线程的计算压力,然后触发模块M2执行,继续查看过载线程的下一个线程的状态;
具体地,所述模块M4包括:通过Stealing线程在本地执行窃取的计算任务。
模块N1:判断本地队列是否存在排队等待的计算任务,若列队非空,则触发模块N2执行;若列队为空,则完成了一次Ring Stealing过程;
具体地,所述模块N1包括:通过Stealing线程判断本地的计算任务队列是否为空,若任务队列非空,则调用模块N2,若任务队列为空,则完成了一次的Ring Stealing的过程。
模块N2:执行当前线程列队中的计算任务。
具体地,在高并发的请求处理系统中,每个线程并行执行计算任务,且线程均会轮询触发Ring Stealing过程,从而达到均衡各个线程之间负载压力的效果。
高并发的请求处理系统采用客户机/服务器(C/S)模式,由多个客户端高并发地往服务器端发送请求,服务器端将请求存储在任务队列中,每个线程各自配有一个任务队列,请求会随机分配到某个线程的任务队列中,各个线程并行执行队列中的计算任务。
优选例2:
如图1所示,为本发明Ring Stealing(任务窃取)的具体流程。下面假设环形队列中一共有16个工作线程,编号从0号线程到15号线程,并且当前线程为1号线程,结合图1对以下多线程负载均衡步骤进行详细描述:
在步骤401中,当前线程1号线程首先将自己的next变量加1,从而指向环形队列中的下一个线程,即2号线程,然后查看2号线程的工作状态;
在步骤402中,1号线程通过比较2号线程处理当前计算任务花费的时间t和时间阈值10ms的大小来判断2号线程目前处于的工作状态,若t大于时间阈值10ms,则2号线程目前被复杂计算任务堵塞,处于过载状态,进入步骤403;否则,2号线程处于正常状态,无需1号线程为其分担负载压力,则进入步骤405中;
在步骤403中,1号线程从2号线程的任务队列中窃取计算任务,从而达到为其分担负载压力的效果;
在步骤404中,在窃取到2号线程任务队列中的计算任务之后,1号线程在本地执行窃取的计算任务,从而降低了该请求的处理延时;由于2号线程自己处于过载状态下,所以它无法为3号线程分担负载压力,因此Ring Stealing会进入循环继续执行步骤401,即查看3号线程的工作状态,假设在步骤402中比较发现3号线程处理当前计算任务花费的时间也超过了时间阈值,则判断3号线程也处于过载状态,那么1号线程需要代替2号线程为3号线程分担负载压力,此时进入步骤403窃取3号线程任务队列中的计算任务,然后进入步骤404在1号线程本地执行从3号线程队列中窃取的计算任务;继而继续进入循环判断1号线程是否需要为4号线程分担负载,进入执行步骤401,查看4号线程的工作状态,假设在步骤402中比较发现4号线程处于正常状态,那么退出该循环,进入步骤405;
在步骤405中,判断自己的任务队列是否存有未处理的计算任务,若队列非空,则进入步骤406;
在步骤406中,处理自己队列中的计算任务。至此完成一次Ring Stealing的过程。
在高并发的请求处理系统中,各个线程并行处理计算任务,每个线程均会轮询触发Ring Stealing过程,从而达到均衡各个线程之间负载压力的效果
优选例3:
一种适用于低时延高并发的请求处理系统的名为Ring Stealing的多线程负载均衡技术,该技术下,系统中的各个线程按编号从小到大排列,并且首尾相连形成一个环。在系统运行时每个线程会动态地查看下一个线程的工作状态,若发现下一个线程处于过载状态时,则为过载线程分担负载压力,从而达到均衡多个线程负载压力的效果。在为过载线程分担负载的同时,该线程还会额外去查看过载线程的下一个线程的工作状态,即下下个线程的工作状态,若其处于正常状态则停止查找,若其也处于过载状态则同时分担2个过载线程的压力并且继续查看下一个线程。当多个相邻线程均处于过载状态时,该技术可以让一个线程分担多个线程的负载。根据本发明提供的Ring Stealing技术,其特征在于,所述的多线程负载均衡包括以下步骤:
(1)线程都有自己的编号,每个线程首先会查看下一个线程的状态;
(2)判断下一个线程是否处于过载状态,如果处于过载状态,则执行步骤(3);
如果处于正常状态,则执行步骤(5);
(3)从过载线程的任务队列中窃取计算任务;
(4)在本地执行该计算任务,分担过载线程的计算压力;然后执行步骤(1),继续查看过载线程的下一个线程的状态,若该线程也处于过载状态,则继续执行步骤(3)、(4)、(1),直到找到一个处于正常状态的线程后跳出循环,然后执行步骤(5);
(5)查看自己队列中是否还有排队等待的计算任务,若队列非空,则执行步骤(6);若队列为空,则完成了一次Ring Stealing过程。
(6)执行自己队列中的计算任务。
所述的一种适用于低时延高并发的请求处理系统的名为Ring Stealing的多线程负载均衡技术,其特征在于,所述的步骤(1)中,next变量的值会加1,从而指向下一个线程。
所述的一种适用于低时延高并发的请求处理系统的名为Ring Stealing的多线程负载均衡技术,其特征在于,所述的步骤(2)中,通过比较处理当前计算任务已经花费的时间和时间阈值10ms的大小来判断该线程是否处于过载状态,若已经花费的时间大于10ms,则该线程目前被复杂计算任务堵塞,处于过载状态;若时间小于10ms,则该线程处于正常状态。
所述的一种适用于低时延高并发的请求处理系统的名为Ring Stealing的多线程负载均衡技术,其特征在于,所述的步骤(3)中,Stealing线程会从过载线程的队列首部窃取计算任务。
所述的步骤(3)中,Stealing线程会将过载线程队列首部的任务从其队列中移出,然后由Stealing线程解析任务中的查询请求,待计算出查询结果后由Stealing线程将结果返回给客户端,事实上,客户端只关心查询结果,不关心是由哪个线程计算得出的。
所述的一种适用于低时延高并发的请求处理系统的名为Ring Stealing的多线程负载均衡技术,其特征在于,所述的步骤(4)中,Stealing线程会在本地执行窃取的计算任务,为过载线程分担负载压力。然后循环执行步骤(1)(2)(3)(4)直到下一个线程处于正常状态,从而跳出循环,进入步骤(5)。
所述的一种适用于低时延高并发的请求处理系统的名为Ring Stealing的多线程负载均衡技术,其特征在于,所述的步骤(5)中,Stealing线程会查看自己的任务队列是否为空,若任务队列非空,则执行自己任务队列中的计算任务,至此,一次的Ring Stealing的过程结束。
所述的一种适用于低时延高并发的请求处理系统的名为Ring Stealing的多线程负载均衡技术,其特征在于,在高并发的请求处理系统中,各个线程并行执行计算任务,每个线程均会轮询触发Ring Stealing过程,从而达到均衡各个线程之间负载压力的效果。
高并发的请求处理系统采用客户机/服务器(C/S)模式,由多个客户端高并发地往服务器端发送请求,服务器端将请求存储在任务队列中,每个线程各自配有一个任务队列,请求会随机分配到某个线程的任务队列中,各个线程并行执行队列中的计算任务。
本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的系统、装置及其各个模块以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的系统、装置及其各个模块以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同程序。所以,本发明提供的系统、装置及其各个模块可以被认为是一种硬件部件,而对其内包括的用于实现各种程序的模块也可以视为硬件部件内的结构;也可以将用于实现各种功能的模块视为既可以是实现方法的软件程序又可以是硬件部件内的结构。
以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。
Claims (10)
1.一种基于任务窃取算法的任务窃取方法,其特征在于,包括:
步骤1:将高并发的请求处理系统中的各个线程按编号从小到大排列形成队列,并且队列首尾相连形成一个环;
步骤2:针对当前线程,判断下一个线程的状态;若处于过载状态,执行步骤3,若处于正常状态,则执行步骤A;
步骤3:根据步骤2判断的线程状态,当处于过载状态时,从过载线程的任务列队中窃取计算任务;
步骤4:在本地执行步骤3窃取的计算任务,然后执行步骤2,继续查看过载线程的下一个线程的状态;
步骤A:判断本地队列是否存在排队等待的计算任务,若列队非空,则执行步骤B;若列队为空,则完成了一次Ring Stealing过程;所述Ring Stealing过程指任务窃取过程;
步骤B:执行当前线程列队中的计算任务。
2.根据权利要求1所述的一种基于任务窃取算法的任务窃取方法,其特征在于,所述步骤2中过载状态包括:
若线程处理当前计算任务的时间大于等于时间阈值,则认为线程目前被复杂计算任务堵塞,处于过载状态;
若线程处理当前计算任务的时间小于时间阈值,则认为线程处于正常状态。
3.根据权利要求1所述的一种基于任务窃取算法的任务窃取方法,其特征在于,所述步骤3包括通过Stealing工作线程从过载线程的队列首部窃取计算任务;
所述步骤4包括:通过Stealing线程在本地执行窃取的计算任务。
4.根据权利要求1所述的一种基于任务窃取算法的任务窃取方法,其特征在于,所述步骤A包括:通过Stealing线程判断本地的计算任务队列是否为空,若任务队列非空,则进入步骤B继续执行,若任务队列为空,则完成了一次的Ring Stealing的过程。
5.根据权利要求1所述的一种基于任务窃取算法的任务窃取方法,其特征在于,在高并发的请求处理系统中,每个线程并行执行计算任务,且线程均会轮询触发Ring Stealing过程。
6.一种基于任务窃取算法的任务窃取系统,其特征在于,包括:
模块M1:将系统中的各个线程按编号从小到大排列形成队列,并且队列首尾相连形成一个环;
模块M2:针对当前线程,判断下一个线程的状态;若处于过载状态,触发模块M3执行,若处于正常状态,则触发模块N1执行;
模块M3:根据模块M2判断的线程状态,当处于过载状态时,从过载线程的任务列队中窃取计算任务;
模块M4:在本地执行模块M3窃取的计算任务,然后触发模块M2执行,继续查看过载线程的下一个线程的状态;
模块N1:判断本地队列是否存在排队等待的计算任务,若列队非空,则触发模块N2执行;若列队为空,则完成了一次Ring Stealing过程;
模块N2:执行当前线程列队中的计算任务。
7.根据权利要求6所述的一种基于任务窃取算法的任务窃取系统,其特征在于,所述模块M2中过载状态包括:
若线程处理当前计算任务的时间大于等于时间阈值,则认为线程目前被复杂计算任务堵塞,处于过载状态;
若线程处理当前计算任务的时间小于时间阈值,则认为线程处于正常状态。
8.根据权利要求6所述的一种基于任务窃取算法的任务窃取系统,其特征在于,所述模块M3包括通过Stealing线程从过载线程的队列首部窃取计算任务;
所述模块M4包括:通过Stealing线程在本地执行窃取的计算任务。
9.根据权利要求6所述的一种基于任务窃取算法的任务窃取系统,其特征在于,所述模块N1包括:通过Stealing线程判断本地的计算任务队列是否为空,若任务队列非空,则调用模块N2,若任务队列为空,则完成了一次的Ring Stealing的过程。
10.根据权利要求6所述的一种基于任务窃取算法的任务窃取系统,其特征在于,在高并发的请求处理系统中,每个线程并行执行计算任务,且线程均会轮询触发Ring Stealing过程。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910954294.4A CN110908794B (zh) | 2019-10-09 | 2019-10-09 | 基于任务窃取算法的任务窃取方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910954294.4A CN110908794B (zh) | 2019-10-09 | 2019-10-09 | 基于任务窃取算法的任务窃取方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110908794A true CN110908794A (zh) | 2020-03-24 |
CN110908794B CN110908794B (zh) | 2023-04-28 |
Family
ID=69815368
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910954294.4A Active CN110908794B (zh) | 2019-10-09 | 2019-10-09 | 基于任务窃取算法的任务窃取方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110908794B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113703941A (zh) * | 2021-08-30 | 2021-11-26 | 竞技世界(北京)网络技术有限公司 | 任务调度方法、系统及电子设备 |
WO2022111264A1 (en) * | 2020-11-24 | 2022-06-02 | International Business Machines Corporation | Reducing load balancing work stealing |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7565651B1 (en) * | 2000-05-25 | 2009-07-21 | Oracle International Corporation | Parallel task scheduling system for computers |
US7945911B1 (en) * | 2005-06-03 | 2011-05-17 | Oracle America, Inc. | Barrier synchronization method and apparatus for work-stealing threads |
WO2011110028A1 (zh) * | 2010-03-09 | 2011-09-15 | 华为技术有限公司 | 负载分担方法、系统和接入服务器 |
CN104156260A (zh) * | 2014-08-07 | 2014-11-19 | 北京航空航天大学 | 一种基于任务窃取的并发队列访问控制方法及系统 |
CN106227594A (zh) * | 2016-07-11 | 2016-12-14 | 中国人民解放军国防科学技术大学 | 一种基于分屏的多核cpu帧缓存显示优化方法 |
CN107220111A (zh) * | 2017-04-28 | 2017-09-29 | 华中科技大学 | 一种基于任务窃取的任务调度方法及系统 |
CN107832146A (zh) * | 2017-10-27 | 2018-03-23 | 北京计算机技术及应用研究所 | 高可用集群系统中的线程池任务处理方法 |
CN108259375A (zh) * | 2018-02-27 | 2018-07-06 | 盛科网络(苏州)有限公司 | 一种队列级的动态负载分担的实现方法及装置 |
-
2019
- 2019-10-09 CN CN201910954294.4A patent/CN110908794B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7565651B1 (en) * | 2000-05-25 | 2009-07-21 | Oracle International Corporation | Parallel task scheduling system for computers |
US7945911B1 (en) * | 2005-06-03 | 2011-05-17 | Oracle America, Inc. | Barrier synchronization method and apparatus for work-stealing threads |
WO2011110028A1 (zh) * | 2010-03-09 | 2011-09-15 | 华为技术有限公司 | 负载分担方法、系统和接入服务器 |
CN104156260A (zh) * | 2014-08-07 | 2014-11-19 | 北京航空航天大学 | 一种基于任务窃取的并发队列访问控制方法及系统 |
CN106227594A (zh) * | 2016-07-11 | 2016-12-14 | 中国人民解放军国防科学技术大学 | 一种基于分屏的多核cpu帧缓存显示优化方法 |
CN107220111A (zh) * | 2017-04-28 | 2017-09-29 | 华中科技大学 | 一种基于任务窃取的任务调度方法及系统 |
CN107832146A (zh) * | 2017-10-27 | 2018-03-23 | 北京计算机技术及应用研究所 | 高可用集群系统中的线程池任务处理方法 |
CN108259375A (zh) * | 2018-02-27 | 2018-07-06 | 盛科网络(苏州)有限公司 | 一种队列级的动态负载分担的实现方法及装置 |
Non-Patent Citations (1)
Title |
---|
杨开杰;刘秋菊;徐汀荣;: "线程池的多线程并发控制技术研究" * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022111264A1 (en) * | 2020-11-24 | 2022-06-02 | International Business Machines Corporation | Reducing load balancing work stealing |
US11645200B2 (en) | 2020-11-24 | 2023-05-09 | International Business Machines Corporation | Reducing load balancing work stealing |
GB2616755A (en) * | 2020-11-24 | 2023-09-20 | Ibm | Reducing load balancing work stealing |
GB2616755B (en) * | 2020-11-24 | 2024-02-28 | Ibm | Reducing load balancing work stealing |
CN113703941A (zh) * | 2021-08-30 | 2021-11-26 | 竞技世界(北京)网络技术有限公司 | 任务调度方法、系统及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN110908794B (zh) | 2023-04-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108762896B (zh) | 一种基于Hadoop集群任务调度方法及计算机设备 | |
US11003489B2 (en) | Cause exception message broadcast between processing cores of a GPU in response to indication of exception event | |
KR101391907B1 (ko) | 인터럽트 컨트롤러 | |
CN110908794A (zh) | 基于任务窃取算法的任务窃取方法及系统 | |
US9189293B2 (en) | Computer, virtualization mechanism, and scheduling method | |
US20160335135A1 (en) | Method for minimizing lock contention among threads when tasks are distributed in multithreaded system and appratus using the same | |
CN108762905B (zh) | 一种多任务事件的处理方法和装置 | |
CN109033814B (zh) | 智能合约触发方法、装置、设备及存储介质 | |
US8352943B2 (en) | Method for preventing industrial automation system from avalanche | |
EP3147785B1 (en) | Task processing method and device | |
US20110078702A1 (en) | Multiprocessor system | |
EP3756089A1 (en) | Processor achieving zero-overhead loop | |
CN111988240A (zh) | 一种数据发送方法、装置、电子设备及存储介质 | |
JP4610322B2 (ja) | 割込み処理制御の方法と装置 | |
CN106855825B (zh) | 一种任务处理方法及其装置 | |
CN111782378A (zh) | 自适应性的处理性能调整方法、服务器及可读存储介质 | |
CN108509257B (zh) | 一种基于多线程的消息处理方法及装置 | |
CN110704206B (zh) | 一种实时计算方法、计算机存储介质及电子设备 | |
CN102567120A (zh) | 一种节点调度优先级确定方法及装置 | |
US7484214B2 (en) | Real time control system | |
CN109964206B (zh) | 用于处理任务的设备和方法 | |
CN116302420A (zh) | 并发调度方法、装置、计算机设备及计算机可读存储介质 | |
CN110673937B (zh) | 单片机及其同步异步控制方法 | |
CN112199201A (zh) | 延时任务处理方法、装置和设备 | |
EP0481458A2 (en) | High speed synchronous processing system for executing parallel processing of programs |
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 |