一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于线程池的任务调度方法、装置及系统与流程

2022-05-08 08:53:22 来源:中国专利 TAG:


1.本技术涉及计算机技术领域,特别涉及一种基于线程池的任务调度方法、装置、系统、计算机设备及可读存储介质。


背景技术:

2.商用路由协议平台zebos系统的线程机制,是以函数作为最小调度单位,在单线程环境下线程进行非抢占式调度,每一个参与调度的执行函数必须执行完成,才会调度下一个函数。这种调度方式有一个很明显缺点,即调度周期随被调度的函数执行时间的不同而不同。若调度函数队列中存在一些执行时间较长的函数,则其他实时性敏感的函数调度时间就也会变得非常长。


技术实现要素:

3.本技术的目的是提供一种基于线程池的任务调度方法、装置、系统、计算机设备及可读存储介质,用以解决目前的任务调度方案受限于函数执行时间,导致效率较低的问题。其具体方案如下:第一方面,本技术提供了一种基于线程池的任务调度方法,应用于主线程,包括:将目标任务卸载至主线程队列,并向第二主线程管道写入事件使得第一主线程管道可读,以便于线程池中用于监听所述第一主线程管道的线程在所述第一主线程管道可读时从所述主线程队列获取所述目标任务并执行任务处理函数,得到所述目标任务的处理结果,进而将所述目标任务的处理结果写入线程池队列,并向第二线程池管道写入事件使得第一线程池管道可读;监听所述第一线程池管道,在所述第一线程池管道可读时,从所述线程池队列中获取所述目标任务的处理结果。
4.可选的,所述目标任务包括耗时超过时间阈值的任务和/或与目标业务无关的任务。
5.可选的,每个所述目标任务有且仅有一个线程获取到。
6.第二方面,本技术提供了一种基于线程池的任务调度装置,应用于主线程,包括:任务卸载模块,用于将目标任务卸载至主线程队列,并向第二主线程管道写入事件使得第一主线程管道可读,以便于线程池中用于监听所述第一主线程管道的线程在所述第一主线程管道可读时从所述主线程队列获取所述目标任务并执行任务处理函数,得到所述目标任务的处理结果,进而将所述目标任务的处理结果写入线程池队列,并向第二线程池管道写入事件使得第一线程池管道可读;处理结果监听模块,用于监听所述第一线程池管道,在所述第一线程池管道可读时,从所述线程池队列中获取所述目标任务的处理结果。
7.第三方面,本技术提供了一种基于线程池的任务调度方法,应用于线程池,包括:控制线程池中的线程监听第一主线程管道,在所述第一主线程管道可读时,从主
线程队列中获取目标任务,其中所述目标任务为主线程卸载至所述主线程队列的,所述主线程在将所述目标任务卸载至所述主线程队列时还向所述第二主线程管道写入事件使得所述第一主线程管道可读;控制线程池中的线程执行任务处理函数,得到所述目标任务的处理结果,将所述目标任务的处理结果写入线程池队列中,并向第二线程池管道写入事件使得第一线程池管道可读,以便于用于监听所述第一线程池管道的主线程在所述第一线程池管道可读时,从所述线程池队列中获取所述目标任务的处理结果。
8.第四方面,本技术提供了一种基于线程池的任务调度装置,应用于线程池,包括:任务监听模块,用于控制线程池中的线程监听第一主线程管道,在所述第一主线程管道可读时,从主线程队列中获取目标任务,其中所述目标任务为主线程卸载至所述主线程队列的,所述主线程在将所述目标任务卸载至所述主线程队列时还向所述第二主线程管道写入事件使得所述第一主线程管道可读;任务处理模块,用于控制线程池中的线程执行任务处理函数,得到所述目标任务的处理结果,将所述目标任务的处理结果写入线程池队列中,并向第二线程池管道写入事件使得第一线程池管道可读,以便于用于监听所述第一线程池管道的主线程在所述第一线程池管道可读时,从所述线程池队列中获取所述目标任务的处理结果。
9.第五方面,本技术提供了一种基于线程池的任务调度系统,包括主线程和线程池;其中,所述主线程用于将目标任务卸载至主线程队列,并向第二主线程管道写入事件使得第一主线程管道可读;所述线程池中的线程用于监听所述第一主线程管道,在所述第一主线程管道可读时,线程从所述主线程队列中获取所述目标任务并执行任务处理函数,得到所述目标任务的处理结果,进而将所述目标任务的处理结果写入线程池队列中,并向第二线程池管道写入事件使得第一线程池管道可读;所述主线程还用于监听所述第一线程池管道,在所述第一线程池管道可读时,从所述线程池队列中获取所述目标任务的处理结果。
10.第六方面,本技术提供了一种计算机设备,包括:存储器:用于存储计算机程序;处理器:用于执行所述计算机程序,以实现如上所述的基于线程池的任务调度方法。
11.第七方面,本技术提供了一种可读存储介质,所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时用于实现如上所述的基于线程池的任务调度方法。
12.本技术所提供的一种基于线程池的任务调度方法,应用于主线程,包括:将目标任务卸载至主线程队列,并向第二主线程管道写入事件使得第一主线程管道可读,以便于线程池中用于监听第一主线程管道的线程在第一主线程管道可读时从主线程队列获取目标任务并执行任务处理函数,得到目标任务的处理结果,进而将目标任务的处理结果写入线程池队列,并向第二线程池管道写入事件使得第一线程池管道可读;监听第一线程池管道,在第一线程池管道可读时,从线程池队列中获取目标任务的处理结果。可见,该方法能够将一些复杂的计算任务卸载到线程池中执行,达到加快处理速度,降低函数队列调度时延的目的。
13.此外,本技术还提供了一种基于线程池的任务调度装置、系统、计算机设备及可读
存储介质,其技术效果与上述方法的技术效果相对应,这里不再赘述。
附图说明
14.为了更清楚的说明本技术实施例或现有技术的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
15.图1为本技术所提供的应用于主线程的基于线程池的任务调度方法实施例的示意图;图2为本技术所提供的应用于主线程的基于线程池的任务调度装置实施例的示意图;图3为本技术所提供的应用于线程池的基于线程池的任务调度方法实施例的示意图;图4为本技术所提供的应用于线程池的基于线程池的任务调度装置实施例的示意图;图5为本技术所提供的计算机设备实施例的示意图。
具体实施方式
16.为了使本技术领域的人员更好地理解本技术方案,下面结合附图和具体实施方式对本技术作进一步的详细说明。显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
17.本技术的核心是提供一种基于线程池的任务调度方法、装置、系统、计算机设备及可读存储介质,能够将一些复杂的计算任务卸载到线程池中执行,达到加快处理速度,降低函数队列调度时延的目的。
18.下面对本技术提供的应用于主线程的基于线程池的任务调度方法实施例进行介绍,参见图1,该实施例包括:s11、将目标任务卸载至主线程队列,并向第二主线程管道写入事件使得第一主线程管道可读,以便于线程池中用于监听第一主线程管道的线程在第一主线程管道可读时从主线程队列获取目标任务并执行任务处理函数,得到目标任务的处理结果,进而将目标任务的处理结果写入线程池队列,并向第二线程池管道写入事件使得第一线程池管道可读;s12、监听第一线程池管道,在第一线程池管道可读时,从线程池队列中获取目标任务的处理结果。
19.具体的,上述目标任务包括耗时超过时间阈值的任务和/或与目标业务无关的任务。实际应用中,每个目标任务有且仅有一个线程能够获取到。
20.下面对本技术实施例提供的应用于主线程的基于线程池的任务调度装置进行介绍,下文描述的应用于主线程的基于线程池的任务调度装置与上文描述的应用于主线程的基于线程池的任务调度方法可相互对应参照。
21.如图2所示,该实施例包括:
任务卸载模块21,用于将目标任务卸载至主线程队列,并向第二主线程管道写入事件使得第一主线程管道可读,以便于线程池中用于监听第一主线程管道的线程在第一主线程管道可读时从主线程队列获取目标任务并执行任务处理函数,得到目标任务的处理结果,进而将目标任务的处理结果写入线程池队列,并向第二线程池管道写入事件使得第一线程池管道可读;处理结果监听模块22,用于监听第一线程池管道,在第一线程池管道可读时,从线程池队列中获取目标任务的处理结果。
22.本实施例的应用于主线程的基于线程池的任务调度装置用于实现前述的应用于主线程的基于线程池的任务调度方法,因此该装置中的具体实施方式可见前文中的应用于主线程的基于线程池的任务调度方法的实施例部分,在此不再展开介绍。
23.下面对本技术提供的应用于线程池的基于线程池的任务调度方法实施例进行介绍,参见图3,该实施例包括:s31、控制线程池中的线程监听第一主线程管道,在第一主线程管道可读时,从主线程队列中获取目标任务,其中目标任务为主线程卸载至主线程队列的,主线程在将目标任务卸载至主线程队列时还向第二主线程管道写入事件使得第一主线程管道可读;s32、控制线程池中的线程执行任务处理函数,得到目标任务的处理结果,将目标任务的处理结果写入线程池队列中,并向第二线程池管道写入事件使得第一线程池管道可读,以便于用于监听第一线程池管道的主线程在第一线程池管道可读时,从线程池队列中获取目标任务的处理结果。
24.下面对本技术实施例提供的应用于线程池的基于线程池的任务调度装置进行介绍,下文描述的应用于线程池的基于线程池的任务调度装置与上文描述的应用于线程池的基于线程池的任务调度方法可相互对应参照。
25.如图4所示,该实施例包括:任务监听模块41,用于控制线程池中的线程监听第一主线程管道,在第一主线程管道可读时,从主线程队列中获取目标任务,其中目标任务为主线程卸载至主线程队列的,主线程在将目标任务卸载至主线程队列时还向第二主线程管道写入事件使得第一主线程管道可读;任务处理模块42,用于控制线程池中的线程执行任务处理函数,得到目标任务的处理结果,将目标任务的处理结果写入线程池队列中,并向第二线程池管道写入事件使得第一线程池管道可读,以便于用于监听第一线程池管道的主线程在第一线程池管道可读时,从线程池队列中获取目标任务的处理结果。
26.上文分别从主线程和线程池的角度对本技术的实施过程进行介绍,下面融合双方对整体实施过程做进一步说明。
27.zebos主线程(程序为单线程执行流,无多线程)调度策略如下:(1)初始化,建立事件处理框架,创建多个socket(套接字)或多个定时器;(2)监听事件,事件类型包括:某个socket可读、某个socket可写、某个定时器超时;(3)上述三种事件均对应一个处理函数,当事件发生时,对应的处理函数便被执行,当处理函数执行完毕后,回到(2)继续监听事件。
28.值得一提的是,处理函数执行期间,线程不可中断或被其他事件抢占,必须等到函数执行完毕后才能继续监听事件。
29.对于某些非常耗时的函数(计算密集型或io密集型)或与业务无关的处理函数(可单独执行的),可以将其安排到其他的线程中执行,执行完成后用某种方式(事件)告知主线程,由主线程负责将执行结果同步到主线程中供其他处理函数读写。对于时间敏感型处理函数,不受其他耗时处理函数的影响,能最快时间获得调度权,因为耗时处理函数被分发到线程池中执行,不占用主线程的资源。
30.管道(pipe)作为进程间通信的一种socket,也可用于一个进程间,不同线程之间的通信;管道创建后分为第一管道pipe[0]及第二管道pipe[1],向第二管道中写数据,则在第一管道中可以将数据读取出来。管道作为一种通信的socket,其可读写状态也可以作为一个事件触发zebos执行处理函数。
[0031]
具体的,初始化阶段创建2个管道,用于zebos主线程与线程池之间互相通信,分别命名为pipe-m2p(main to pool,主线程到线程池)及pipe-p2m(pool to main,线程池到主线程);还要创建2个队列用于主线程与线程池之间数据交互,分别命名为queue-m2p及queue-p2m;最后将创建有n个线程的线程池。
[0032]
将pipe-p2m[0]的可读事件添加到主线程的监听列表中,如果主线程有卸载任务需要分发到线程池中执行,首先将任务添加到queue-m2p队列中,随后向pipe-m2p[1]写入事件,触发线程池去执行,随后立即返回到监听事件状态,等待其他事件。
[0033]
线程池中的n个线程均采用select(即用于监视文件描述符的变化情况的计算机函数,如读写或是异常)调用监听pipe-m2p[0]的可读事件,当pipe-m2p[0]可读时,则说明当前有卸载任务分发到线程池中。n个线程同时从queue-m2p队列中取卸载任务,有且仅有一个线程能成功取出任务,未取到任务的线程,继续监听pipe-m2p[0]可读事件,取到任务的线程,执行任务处理函数,随后将结果添加到queue-p2m队列中,并向pipe-p2m[1]写入返回事件,触发主线程读取任务执行状态,最后和其他线程一样,继续监听pipe-m2p[0]可读事件,等待下一次任务。
[0034]
主线程pipe-p2m[0]可读事件被触发,主线程根据结果,找到对应的任务,合并到主线程自身的数据中,完成本次任务卸载操作。
[0035]
综上所述,本实施例提供了一种在函数队列调度器中的使用线程池卸载任务的方案,在传统调度机制下设计了一套多线程的执行池(线程池),可以将一些复杂的计算工作卸载到线程池中执行,达到加快处理速度,降低函数队列调度时延的目的。本实施例支持多线程处理,加快处理速度;本实施例不影响原有的线程结构,而且线程池大小可以调整,可扩展性强。
[0036]
此外,本技术还提供了一种基于线程池的任务调度系统,包括主线程和线程池;其中,主线程用于将目标任务卸载至主线程队列,并向第二主线程管道写入事件使得第一主线程管道可读;线程池中的线程用于监听所述第一主线程管道,在第一主线程管道可读时,线程从主线程队列中获取目标任务并执行任务处理函数,得到目标任务的处理结果,进而将目标任务的处理结果写入线程池队列中,并向第二线程池管道写入事件使得第一线程池管道可读;主线程还用于监听第一线程池管道,在第一线程池管道可读时,从线程池队列中获取目标任务的处理结果。
[0037]
本技术还提供了一种计算机设备,如图5所示,包括:存储器100:用于存储计算机程序;处理器200:用于执行所述计算机程序,以实现如上文所述的基于线程池的任务调度方法。
[0038]
最后,本技术提供了一种可读存储介质,所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时用于实现如上文所述的基于线程池的任务调度方法。
[0039]
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
[0040]
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。
[0041]
以上对本技术所提供的方案进行了详细介绍,本文中应用了具体个例对本技术的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本技术的方法及其核心思想;同时,对于本领域的一般技术人员,依据本技术的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本技术的限制。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献