一种多线程任务调度处理方法与流程

文档序号:33647711发布日期:2023-03-29 05:27阅读:57来源:国知局
一种多线程任务调度处理方法与流程

1.本发明涉及多线程调度领域,具体涉及一种多线程任务调度处理方法。


背景技术:

2.在后台系统开发设计中,有时会遇到需要较长执行时间的任务,且无需立即对该任务的结果进行响应的情况。我们通常的做法是将任务剥离当前线程,采用其他线程来完成任务的执行。线程的申请释放可以使用c++标准库中的thread类型,但是当需要频繁的执行此类任务时,线程的频繁申请、释放会造成较多系统开销,存在较大的资源浪费和时间损耗。同时,每次任务处理时都申请新的线程资源,会导致系统的总线程资源不可控,对系统总体性能造成影响。


技术实现要素:

3.以下给出一个或多个方面的简要概述以提供对这些方面的基本理解。此概述不是所有构想到的方面的详尽综览,并且既非旨在指认出所有方面的关键性或决定性要素亦非试图界定任何或所有方面的范围。其唯一的目的是要以简化形式给出一个或多个方面的一些概念以为稍后给出的更加详细的描述之序。
4.本发明的目的在于解决上述问题,提供了一种多线程任务调度处理方法,使用任务缓存队列缓存待处理的任务,然后监控线程池获取空闲的处理线程,并将待处理的任务分配给空闲的处理线程,利用空闲的处理线程来处理任务缓存队列中待出队的任务。
5.本发明的技术方案为:
6.本发明提供一种多线程任务调度处理方法,包括以下步骤:
7.获取待处理的新任务,并将新任务添加到任务缓存队列;
8.监控线程池,获取空闲的处理线程;
9.将任务缓存队列中待处理的任务分配给空闲的处理线程进行处理;
10.监控处理线程的任务处理状态,并根据任务处理状态结束对应的处理线程。
11.根据本发明的多线程任务调度处理方法的一实施例,所述多线程任务调度处理方法基于先进先出将获取到的任务添加到任务缓存队列,然后利用线程池中的空闲处理线程处理任务缓存队列中缓存的多个待处理任务。
12.根据本发明的多线程任务调度处理方法的一实施例,所述多线程任务调度对象包括任务对象和处理线程对象,所述多线程任务调度处理方法通过任务对象将获取到新任务添加到任务缓存队列,然后利用处理线程对象调用线程池中空闲的处理线程处理任务缓存队列中的任务。
13.根据本发明的多线程任务调度处理方法的一实施例,所述多线程任务调度处理方法将获取到新任务添加到任务缓存队列后,通过任务分配线程将任务缓存队列中待处理的任务分配给线程池中空闲的处理线程,然后使用线程池中空闲的处理线程处理任务缓存队列中的任务。
14.根据本发明的多线程任务调度处理方法的一实施例,所述多线程任务调度处理方法通过以下步骤启动任务分配线程将任务缓存队列中待处理的任务分配给线程池中空闲的处理线程进行处理:
15.触发任务分配线程等待信号,并判断是否任务缓存队列中是否有任务需要出队处理;若是,则监测线程池中是否有空闲的处理线程,若否,则继续等待任务分配线程等待信号触发;
16.监测线程池中是否有空闲的处理线程;若有,则调用空闲的处理线程处理任务;若无,则继续监控空闲的处理线程;
17.遍历缓存任务队列,将获取的新任务以及任务缓存队列中其他待出队的任务分配给空闲的处理线程进行处理。
18.根据本发明的多线程任务调度处理方法的一实施例,所述多线程任务调度处理方法监控到线程池中有空闲的处理线程后,触发任务分配线程等待信号;其中,所述任务分配线程等待信号触发后,遍历缓存任务队列,并基于先进先出逻辑依次从缓存任务队列取出待出队的任务,然后将获取到的任务分配给空闲的任务分配线程进行处理。
19.根据本发明的多线程任务调度处理方法的一实施例,所述多线程任务调度处理方法通过线程等待信号触发方法触发任务分配线程等待信号和处理线程等待信号;其中,所述线程等待信号触发方法包括信号量触发方式、定时轮询方式和条件变量方式。
20.根据本发明的多线程任务调度处理方法的一实施例,所述任务处理状态包括空闲状态和执行中状态;其中,所述多线程任务调度处理方法将获取的新任务以及任务缓存队列中其他待出队的任务分配给空闲的处理线程后,将被调用的处理线程的任务处理状态更新为执行中状态,然后利用执行中状态的处理线程处理分配的任务。
21.根据本发明的多线程任务调度处理方法的一实施例,多线程任务调度处理方法利用执行中状态的处理线程处理分配的任务后,监控执行中状态的处理线程是否处理完所有被分配的任务;若是,则结束对应的处理线程,并将对应处理线程返回为空闲状态;若否,则继续监控处理线程的任务处理状态。
22.根据本发明的多线程任务调度处理方法的一实施例,所述多线程任务调度处理方法根据处理线程对象类型调用并管理处理线程对象;其中,所述处理线程对象类型包括指针类型、vector类、list类,所述线程池根据处理线程对象类型管理对线程池中所有处理线程。
23.根据本发明的多线程任务调度处理方法的一实施例,所述任务对象为函数指针类型函数,处理线程对象为指针类型数组;其中,所述处理线程对象包含内置的线程类、状态位、处理任务对象指针,所述多线程任务调度处理方法根据线程池容量参数初始化处理线程对象后,根据处理线程对象的线程类、状态位、处理任务对象指针将任务缓存队列中的任务对象分配给对应的处理线程,通过分配到的处理线程处理待执行的任务对象。
24.本发明对比现有技术有如下的有益效果:本发明采用线程池和任务队列的多线程任务调度处理方式,在利用线程资源处理待处理任务之前,初始化多线程任务调度对象,根据线程池的容量参数申请线程资源,并使用任务缓存队列缓存待处理的任务,然后调用线程池中空闲的处理线程处理任务缓存队列中待出队的任务。与现有技术相比,本发明通过线程资源预先申请方式,减少了任务执行时再申请的系统开销和延时抖动问题,降低了资
源浪费和时间损耗,节约系统开销。同时,本技术将总的线程资源控制在一定范围,避免了高并发时任务线程的过多申请造成的系统资源紧张,提高了系统总体性能。
附图说明
25.在结合以下附图阅读本公开的实施例的详细描述之后,能够更好地理解本发明的上述特征和优点。在附图中,各组件不一定是按比例绘制,并且具有类似的相关特性或特征的组件可能具有相同或相近的附图标记。
26.图1是示出本发明的多线程任务调度处理方法一实施例的流程图。
27.图2是示出本发明的调用空闲处理线程处理任务一实施例的流程图。
具体实施方式
28.以下结合附图和具体实施例对本发明作详细描述。注意,以下结合附图和具体实施例描述的诸方面仅是示例性的,而不应被理解为对本发明的保护范围进行任何限制。
29.在此公开一种多线程任务调度处理方法,图1是示出本发明的本发明的多线程任务调度处理方法一实施例的流程图,请参照图1,以下是对多线程任务调度处理方法各步骤的详细说明。
30.步骤s1:初始化多线程任务调度对象,并将新任务添加到任务缓存队列。
31.本实施例中,利用任务缓存队列缓存待处理的任务,并基于先进先出(fifo)的逻辑将获取到的任务添加到任务缓存队列,并对任务缓存队列中缓存的任务进行,然后利用线程池中的空闲处理线程处理任务缓存队列中缓存的多个待处理任务。
32.此外,本实施例中,在进行多线程任务调度处理之前,对多线程任务调度对象进行初始化,然后利用初始化后的多线程任务调度对象进行多线程任务调度处理。其中,多线程任务调度对象包括任务对象和处理线程对象,将任务缓存队列和线程池进行初始化后,利用初始化得到的任务对象将获取到新任务添加到任务缓存队列,然后利用处理线程对象调用线程池中空闲的处理线程处理任务缓存队列中的任务。
33.具体地,本实施例中,任务缓存队列为有锁的fifo(先进先出)队列,队列中缓存有待处理的任务对象。在初始多线程任务调度对象时,首先对任务缓存队列进行初始化,得到任务对象,通过任务对象将新添的任务加入到任务缓存队列中。在完成任务缓存队列的初始化后,根据线程池容量参数初始化处理线程对象,然后利用线程对象调用对应的空闲处理线程来任务缓存队列中的任务。
34.进一步地,本实施例中,根据处理线程对象类型调用和管理处理线程对象。其中,处理线程对象类型包括指针类型、vector类、list类等等,线程池根据处理线程对象类型管理对线程池中所有处理线程。
35.在一种实施方式中,采用指针类型作为数据类型,将待执行的任务抽象为函数指针形式,以方便使用者简单便捷地调用任务对象。此外,本实施例中,线程池中的处理线程对象由指针数组进行管理。其中,处理线程对象内部封装有原生线程库,包含内置的线程类、状态位、处理任务对象指针,根据线程池容量参数初始化处理线程对象后,利用指针数组对线程池中所有线程资源进行统一管理,并根据处理线程对象的线程类、状态位、处理任务对象指针将任务缓存队列中的任务对象分配给对应的处理线程,通过分配到的处理线程
处理待执行的任务对象。这种线程资源预先申请的方法通常用于执行无需获取函数执行结果且执行时间较长、消耗资源较大的任务,通过这种方法,可以有效降低需要新建线程处理任务时造成的系统资源开销,加快任务的处理速度。而且对于无需立即获取执行结果的函数,有限的线程数可以保证程序总的线程资源在可控范围内,不会造成资源的无序申请和扩张。
36.步骤s2:监控线程池,获取空闲的处理线程。
37.步骤s3:将任务缓存队列中待处理的任务分配给空闲的处理线程进行处理。
38.本实施例中,通过上述步骤完成多线程任务调度对象的初始化后,开始启动任务分配线程进行任务分配,监控线程池中的空闲处理线程,将任务缓存队列中待处理的任务分配给线程池中空闲的处理线程,然后利用线程池中空闲的处理线程处理任务缓存队列中的任务。图2是示出本发明的调用空闲处理线程处理任务一实施例的流程图,请参照图2,以下是对调用空闲处理线程处理任务各步骤的详细说明。
39.步骤c1:触发任务分配线程等待信号,并判断是否任务缓存队列中是否有任务需要出队处理;若是,则监控线程池中是否有空闲的处理线程,若否,则继续等待任务分配线程等待信号触发。
40.本实施例中,当添加新任务到多线程任务调度对象后,触发入队信号量,即任务分配线程等待信号。分配线程接收到信号量触发的信号后,首先判断是任务缓存队列中否有任务需要出队。若有任务出队,则再判断此时是否有空闲的任务处理线程,没有的话,则继续监控任务池,直到空闲的处理线程出现。
41.步骤c2:监测线程池中是否有空闲的处理线程;若有,则调用空闲的处理线程处理任务;若无,则继续监控空闲的处理线程。
42.步骤c3:遍历缓存任务队列,将获取的新任务以及任务缓存队列中其他待出队的任务分配给空闲的处理线程进行处理。
43.本实施例中,处理线程完成初始化以后,处于空闲状态的处理线程等待处理信号触发,此时不会消耗cpu资源。当任务分配线程监测到某一处理线程处于空闲状态时,触发任务分配线程的处理等待信号。其中,当任务分配线程等待信号被触发后,开始遍历缓存任务队列,并基于先进先出逻辑从从缓存任务队列取出最先添加的待出队的任务,然后将获取到的任务分配给空闲的任务分配线程进行处理,其他任务的处理以此类推。线程池中的空白处理线程获取到任务后,首先将处理线程状态更新为执行中,然后开始处理任务。若不存在空闲的处理线程,循环等待直到有空闲的处理线程出现再将任务分配。
44.此外,本实施例中,对于过线程等待信号触发方式,可以信号量触发方式、定时轮询方式和条件变量等方式来触发任务分配线程等待信号和处理线程等待信号,从而启动任务分配线程和任务处理线程。
45.步骤s4:监控处理线程的任务处理状态,并根据任务处理状态结束对应的处理线程。
46.本实施例中,任务处理状态包括空闲状态和执行中状态。处理线程状态更新为执行中后,任务分配线程则不会再分配新的任务给该处理线程,该处理线程开始处理任务,通过遍历缓存任务队列,将新添加的任务交给该空闲的处理线程,然后检查队列中是否还有待出队的任务,依次将待出队任务分配发给该处理线程进行处理。
47.此外,本实施例中,当利用处于执行中状态的处理线程处理分配的任务后,开始监控该处理线程是否处理完所有被分配的任务。若是,则结束对应的处理线程,并将对应处理线程返回为空闲状态。此时,该处理线程进入信号量等待阶段,可以接收新的任务对象。如果还没处理完,则需要保持监控处理线程的任务处理状态。
48.提供对本公开的先前描述是为使得本领域任何技术人员皆能够制作或使用本公开。对本公开的各种修改对本领域技术人员来说都将是显而易见的,且本文中所定义的普适原理可被应用到其他变体而不会脱离本公开的精神或范围。由此,本公开并非旨在被限定于本文中所描述的示例和设计,而是应被授予与本文中所公开的原理和新颖性特征相一致的最广范围。
49.本领域技术人员将进一步领会,结合本文中所公开的实施例来描述的各种解说性逻辑板块、模块、电路、和算法步骤可实现为电子硬件、计算机软件、或这两者的组合。为清楚地解说硬件与软件的这一可互换性,各种解说性组件、框、模块、电路、和步骤在上面是以其功能性的形式作一般化描述的。此类功能性是被实现为硬件还是软件取决于具体应用和施加于整体系统的设计约束。技术人员对于每种特定应用可用不同的方式来实现所描述的功能性,但这样的实现决策不应被解读成导致脱离了本发明的范围。
50.结合本文所公开的实施例描述的各种解说性逻辑板块、模块、和电路可用通用处理器、数字信号处理器(dsp)、专用集成电路(asic)、现场可编程门阵列(fpga)或其它可编程逻辑器件、分立的门或晶体管逻辑、分立的硬件组件、或其设计成执行本文所描述功能的任何组合来实现或执行。通用处理器可以是微处理器,但在替换方案中,该处理器可以是任何常规的处理器、控制器、微控制器、或状态机。处理器还可以被实现为计算设备的组合,例如dsp与微处理器的组合、多个微处理器、与dsp核心协作的一个或多个微处理器、或任何其他此类配置。
51.结合本文中公开的实施例描述的方法或算法的步骤可直接在硬件中、在由
52.处理器执行的软件模块中、或在这两者的组合中体现。软件模块可驻留在ram5存储器、闪存、rom存储器、eprom存储器、eeprom存储器、寄存器、硬盘、可移动盘、cd-rom、或本领域中所知的任何其他形式的存储介质中。示例性存储介质耦合到处理器以使得该处理器能从/向该存储介质读取和写入信息。在替换方案中,存储介质可以被整合到处理器。处理器和存储介质可驻
53.留在asic中。asic可驻留在用户终端中。在替换方案中,处理器和存储介0质可作为分立组件驻留在用户终端中。
54.在一个或多个示例性实施例中,所描述的功能可在硬件、软件、固件或其任何组合中实现。如果在软件中实现为计算机程序产品,则各功能可以作为一条或更多条指令或代码存储在计算机可读介质上或藉其进行传送。计算机可读
55.介质包括计算机存储介质和通信介质两者,其包括促成计算机程序从一地向另5一地转移的任何介质。存储介质可以是能被计算机访问的任何可用介质。作为
56.示例而非限定,这样的计算机可读介质可包括ram、rom、eeprom、cd-rom或其它光盘存储、磁盘存储或其它磁存储设备、或能被用来携带或存储指令或数据结构形式的合意程序代码且能被计算机访问的任何其它介质。任何连接也
57.被正当地称为计算机可读介质。例如,如果软件是使用同轴电缆、光纤电缆、0双绞
线、数字订户线(dsl)、或诸如红外、无线电、以及微波之类的无线技
58.术从web网站、服务器、或其它远程源传送而来,则该同轴电缆、光纤电缆、双绞线、dsl、或诸如红外、无线电、以及微波之类的无线技术就被包括在介质的定义之中。如本文中所使用的盘(disk)和碟(disc)包括压缩碟(cd)、激光碟、光碟、数字多用碟(dvd)、软盘和蓝光碟,其中盘(disk)往往以5磁的方式再现数据,而碟(disc)用激光以光学方式再现数据。上述的组合也应被包括在计算机可读介质的范围内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1