一种任务处理方法、装置及电子设备和存储介质制造方法及图纸

技术编号:33536736 阅读:14 留言:0更新日期:2022-05-19 02:19
本申请公开了一种任务处理方法、装置及一种电子设备和计算机可读存储介质,该方法包括:当接收到第一目标任务的入队请求时,确定第一目标任务的生产线程和消费线程;基于生成线程和消费线程在二维任务队列矩阵中确定对应的第一目标任务队列单元;其中,二维任务队列矩阵包括n行n列的多个任务队列单元,n为生产线程数量或消费线程数量;将第一目标任务存储至第一目标任务队列单元中。由此可见,本申请提供的任务处理方法,避免加锁和阻塞带来的性能低下的问题,提高了任务处理性能。提高了任务处理性能。提高了任务处理性能。

【技术实现步骤摘要】
一种任务处理方法、装置及电子设备和存储介质


[0001]本申请涉及计算机
,更具体地说,涉及一种任务处理方法、装置及一种电子设备和一种计算机可读存储介质。

技术介绍

[0002]线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空闲,则线程池将插入另一个辅助线程来使所有处理器保持繁忙。如果所有线程池线程都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个辅助线程但线程的数目永远不会超过最大值。超过最大值的线程可以排队,但他们要等到其他线程完成后才启动。
[0003]线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。可用线程数量应该取决于可用的并发处理器、处理器内核、内存、网络sockets等的数量。
[0004]任务调度以执行线程的常见方法是使用同步队列,称作任务队列。池中的线程等待队列中的任务,并把执行完的任务放入完成队列中。目前,线程池实现上都会使用队列、链表等一些高级数据结构来组织任务,而使用这些数据时,比如任务的入队和出队需要使用锁机制保护队列结构,防止数据破坏,在一些应用场景中、锁的使用会引起系统性能下降,如存储系统中,锁的使用会导致系统延时过高。
[0005]另外,对于任务的产生和执行都会使用生产者和消费者模型,当生产者的生产效率高于消费者时,任务队列会满,这也会导致生产任务阻塞,影响性能。
[0006]因此,如何避免加锁和阻塞带来的性能低下是本领域技术人员需要解决的技术问题。

技术实现思路

[0007]本申请的目的在于提供一种任务处理方法、装置及一种电子设备和一种计算机可读存储介质,避免加锁和阻塞带来的性能低下的问题,提高了任务处理性能。
[0008]为实现上述目的,本申请提供了一种任务处理方法,包括:
[0009]当接收到第一目标任务的入队请求时,确定所述第一目标任务的生产线程和消费线程;
[0010]基于所述生成线程和所述消费线程在二维任务队列矩阵中确定对应的第一目标任务队列单元;其中,所述二维任务队列矩阵包括n行n列的多个任务队列单元,n为生产线程数量或消费线程数量;
[0011]将所述第一目标任务存储至所述第一目标任务队列单元中。
[0012]其中,还包括:
[0013]确定CPU拓扑,并基于所述CPU拓扑构建所述二维任务队列矩阵。
[0014]其中,每个所述任务队列单元包括环形队列和单向链表。
[0015]其中,将所述第一目标任务存储至所述第一目标任务队列单元中,包括:
[0016]判断所述第一目标任务队列单元中的环形队列是否已满;
[0017]若是,则将所述第一目标任务存储至所述第一目标任务队列单元中的第一环形队列中;
[0018]若否,则将所述第一目标任务存储至所述第一目标任务队列单元中的第一单向链表中。
[0019]其中,还包括:
[0020]在目标消费线程的执行任务时,遍历所述目标消费线程对应的第二目标任务队列单元;
[0021]若所述第二目标任务队列单元中存在任务,则从所述第二目标任务队列单元中取出第二目标任务,以便所述目标消费线程执行所述第二目标任务。
[0022]其中,从所述第二目标任务队列单元中取出第二目标任务,包括:
[0023]从所述第二目标任务队列单元中的第二环形队列取出第二目标任务。
[0024]其中,从所述第二目标任务队列单元中的第二环形队列取出第二目标任务之后,还包括:
[0025]判断所述第二目标任务队列单元中的第二单向链表是否存在任务;
[0026]若是,则将所述第二单向链表中的任务移动至所述第二环形队列中。
[0027]为实现上述目的,本申请提供了一种任务处理装置,包括:
[0028]第一确定模块,用于当接收到第一目标任务的入队请求时,确定所述第一目标任务的生产线程和消费线程;
[0029]第二确定模块,用于基于所述生成线程和所述消费线程在二维任务队列矩阵中确定对应的第一目标任务队列单元;其中,所述二维任务队列矩阵包括n行n列的多个任务队列单元,n为生产线程数量或消费线程数量;
[0030]存储模块,用于将所述第一目标任务存储至所述第一目标任务队列单元中。
[0031]为实现上述目的,本申请提供了一种电子设备,包括:
[0032]存储器,用于存储计算机程序;
[0033]处理器,用于执行所述计算机程序时实现如上述任务处理方法的步骤。
[0034]为实现上述目的,本申请提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述任务处理方法的步骤。
[0035]通过以上方案可知,本申请提供的一种任务处理方法,包括:当接收到第一目标任务的入队请求时,确定所述第一目标任务的生产线程和消费线程;基于所述生成线程和所述消费线程在二维任务队列矩阵中确定对应的第一目标任务队列单元;其中,所述二维任务队列矩阵包括n行n列的多个任务队列单元,n为生产线程数量或消费线程数量;将所述第一目标任务存储至所述第一目标任务队列单元中。
[0036]本申请提供的任务处理方法,通过二维任务队列矩阵实现无锁以及满队后不阻塞的线程池,二维任务队列矩阵包括n行n列的多个任务队列单元,每个任务队列单元对应一
个生产线程和一个消费线程,多个线程并发产生任务时无需加锁,而是将各自产生的任务存储至对应的任务队列单元中,同时一个线程对的任务生产和消费执行也无需加锁。当生产线程的生产能力大于消费线程的执行能力导致任务队列满时,生产线程无需阻塞等待,且不会丢失任务。由此可见,本申请提供的任务处理方法,避免加锁和阻塞带来的性能低下的问题,提高了任务处理性能。本申请还公开了一种任务处理装置及一种电子设备和一种计算机可读存储介质,同样能实现上述技术效果。
[0037]应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本申请。
附图说明
[0038]为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。附图是用来提供对本公开的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本公开,但并不构成对本公开的限制。在附图中:
[0039]图1为根据一示例性实施例示出的一种任务处理方法的流程图;
[0040]图本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种任务处理方法,其特征在于,包括:当接收到第一目标任务的入队请求时,确定所述第一目标任务的生产线程和消费线程;基于所述生成线程和所述消费线程在二维任务队列矩阵中确定对应的第一目标任务队列单元;其中,所述二维任务队列矩阵包括n行n列的多个任务队列单元,n为生产线程数量或消费线程数量;将所述第一目标任务存储至所述第一目标任务队列单元中。2.根据权利要求1所述任务处理方法,其特征在于,还包括:确定CPU拓扑,并基于所述CPU拓扑构建所述二维任务队列矩阵。3.根据权利要求1所述任务处理方法,其特征在于,每个所述任务队列单元包括环形队列和单向链表。4.根据权利要求3所述任务处理方法,其特征在于,将所述第一目标任务存储至所述第一目标任务队列单元中,包括:判断所述第一目标任务队列单元中的环形队列是否已满;若是,则将所述第一目标任务存储至所述第一目标任务队列单元中的第一环形队列中;若否,则将所述第一目标任务存储至所述第一目标任务队列单元中的第一单向链表中。5.根据权利要求1所述任务处理方法,其特征在于,还包括:在目标消费线程的执行任务时,遍历所述目标消费线程对应的第二目标任务队列单元;若所述第二目标任务队列单元中存在任务,则从所述第二目标任务队列单元中取出第二目标任务,以便所述目标消费线程执行所述第二目标任务。6...

【专利技术属性】
技术研发人员:孙明刚
申请(专利权)人:苏州浪潮智能科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1