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

任务处理方法、装置和电子设备与流程

2021-10-24 11:28:00 来源:中国专利 TAG:电子设备 装置 智慧 方法 城市

1.本技术涉及智慧城市技术领域,具体涉及一种任务处理方法、装置和电子设备。


背景技术:

2.在智慧交通领域中,视频监控类信令服务器端会接收客户端的sip请求,并对sip请求进行处理,该sip请求可以是请求目标摄像头拍摄的监控数据等。视频监控类信令服务器端接收到sip请求时,需要进行即时处理。现有的处理方法为针对每个请求编制对应的处理方法。当请求到来时,顺序调用处理方法进行处理后返回。这在低并发量请求下并无问题,一旦并发请求量较大,现有的顺序执行的方式会变得响应不及时或者系统来不及处理导致请求丢失。


技术实现要素:

3.本技术实施例提供一种任务处理方法、装置和电子设备,可避免现有技术中服务请求丢失的问题。
4.本技术实施例提供了一种任务处理方法,包括:通过观察者线程创建至少一个生产者线程、至少一个消费者线程和任务容器线程,并将所述生产者线程、所述消费者线程和所述任务容器线程进行初始化,其中,每个生产者线程均包括一任务对象缓存;通过所述生产者线程接收服务请求,并将所述服务请求所对应的工作任务对象加入至对应的任务对象缓存;通过任务容器线程读取所述任务对象缓存中的工作任务对象,将所述工作任务对象存放入对应的任务队列,并从所述任务对象缓存中移除所述工作任务对象;通过所述消费者线程从所述任务队列中,读取任务状态为未处理的工作任务对象以进行处理,并在处理完成后,更新所述工作任务对象的任务状态为已完成,以及通过所述任务容器线程将所述任务队列中的任务状态为已完成的工作任务对象进行清理;通过所述观察者线程监控所述生产者线程、所述任务容器线程和所述消费者线程;当监测到工作任务对象存在堆积时,通过所述观察者线程新增消费者线程,以通过新增的消费者线程来处理堆积的工作任务对象。
5.本技术实施例还提供了一种任务处理装置,包括:创建模块,用于通过观察者线程创建至少一个生产者线程、至少一个消费者线程和任务容器线程,并将所述生产者线程、所述消费者线程和所述任务容器线程进行初始化,其中,每个生产者线程均包括一任务对象缓存;生产者模块,用于通过所述生产者线程接收服务请求,并将所述服务请求所对应的工作任务对象加入至对应的任务对象缓存;任务容器模块,用于通过任务容器线程读取所述任务对象缓存中的工作任务对
象,将所述工作任务对象存放入对应的任务队列,并从所述任务对象缓存中移除所述工作任务对象;消费者模块,用于通过所述消费者线程从所述任务队列中,读取任务状态为未处理的工作任务对象以进行处理,并在处理完成后,更新所述工作任务对象的任务状态为已完成;任务容器模块,还用于通过所述任务容器线程将所述任务队列中的任务状态为已完成的工作任务对象进行清理;监控模块,用于通过所述观察者线程监控所述生产者线程、所述任务容器线程和所述消费者线程;新增模块,用于当监测到工作任务对象存在堆积时,通过所述观察者线程新增消费者线程,以通过新增的消费者线程来处理堆积的工作任务对象。
6.本技术实施例还提供了一种电子设备,所述电子设备包括:一个或多个处理器;存储器;以及一个或多个计算机程序,其中所述处理器和所述存储器相连接,所述一个或多个计算机程序被存储于所述存储器中,并配置为由所述处理器执行上述所述的任务处理方法。
7.本技术实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时,实现上述任一种任务处理方法中的步骤。
8.本技术实施例通过引入生产者消费者模式,并同时引入了观察者线程,通过观察者线程创建各生产者线程、任务容器线程和各消费者线程,其中,观察者线程、生产者线程、任务容器线程和消费者线程四方角色相互独立,可以实现将生产者线程和消费者线程彻底分离,生产者线程只用于将服务请求所对应的工作任务对象加入至对应的任务对象缓存中,任务容器线程用于读取生产者线程的任务对象缓存中的工作任务对象,将工作任务对象放入对应任务队列,并维护任务队列中的工作任务对象的任务状态,消费者线程实现对工作任务对象的处理,使得消费者线程关注于具体的处理逻辑,而生产者线程无需关心处理逻辑,不会因为大量并发的服务请求而造成生产者线程的资源紧张,提高系统吞吐率,同时降低了实现难度和复杂性。而且,利用观察者线程监控各生产者线程、任务容器线程和各消费者线程,当观察者线程检测到工作任务对象存在堆积时,通过增加消费者线程,以使得所有的工作任务对象都会进行处理,提高服务请求的处理速度,提高并发处理性能,避免服务请求丢失。
附图说明
9.为了更清楚地说明本技术实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
10.图1是本技术实施例提供的任务处理系统的场景示意图;图2是本技术实施例提供的任务处理方法的流程示意图;图3是本技术实施例提供的初始化后的观察者线程、生产者线程、任务容器线程、消费者线程的示意图;
图4是本技术实施例提供的生产者线程的处理逻辑示意图;图5是本技术实施例提供的任务容器线程的处理逻辑示意图;图6是本技术实施例提供的观察者线程的处理逻辑示意图;图7是本技术实施例提供的任务处理方法的另一流程示意图;图8是本技术实施例提供的任务处理装置的示意性框图;图9是本技术实施例提供的电子设备的结构示意图。
具体实施方式
11.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
12.本技术实施例提供一种任务处理方法、装置、电子设备和存储介质。本技术实施例提供的任一种任务处理装置,可以集成在电子设备中。该电子设备包括用户终端和服务器,电子设备包括但不限于智能手机、平板电脑、笔记本电脑、智能电视、智能机器人、个人计算机(pc,personal computer)、可穿戴设备、服务器计算机,等等。本技术实施例以电子设备为服务器为例进行说明。
13.请参阅图1,是本技术实施例提供的任务处理系统的场景示意图。该任务处理系统包括客户端和服务器,客户端向服务器发送服务请求,服务请求中携带请求参数和类型标签,该服务请求可以是向服务器请求目标摄像头拍摄的监控数据,还可以是其他类型的服务请求。服务器接收该服务请求,并对服务请求进行一系列的处理。本技术任一实施例中的任务处理方法应用于服务器中,任一实施例中的任务处理装置集成于服务器中。
14.本技术实施例中的任务处理方法引入了生产者消费者模式,利用生产者线程和消费者线程来处理服务请求,然而生产者线程和消费者线程之间存在耦合关系,通常情况下,生产者线程和消费者线程为一一对应的关系,生产者线程生产的工作任务由对应的消费者线程执行后通知生产者线程,而生产者线程则根据消费者线程的处理能力进行工作任务生成。这种模式下,生产者线程的生产能力被消费者线程所制约,且一旦消费者线程处理工作任务时出现异常且终止运行,生产者线程将得不到反馈,导致其判定工作任务未被执行,工作任务持续积压在生产者线程中,容易造成服务请求的丢失。
15.本技术实施例在引入生产者消费者模式之后,进一步对生产者消费者模式进行改进,以避免现有技术中的容易造成服务请求丢失的问题。
16.图2是本技术实施例提供的任务处理方法的流程示意图,该任务处理方法包括如下步骤。
17.101,通过观察者线程创建至少一个生产者线程、至少一个消费者线程和任务容器线程,并将生产者线程、消费者线程和任务容器线程进行初始化,其中,每个生产者线程均包括一任务对象缓存。
18.其中,观察者线程在系统启动时即启动,读取配置和所属服务器的硬件情况、存储等参数,作为初期调度依据。观察者线程为父线程,生产者线程、消费者线程和任务容器线程等为子线程;观察者线程为非侵入式线程,其重启并不会影响生产者线程、消费者线程和
任务容器线程。
19.在系统启动时,启动观察者线程。观察者线程根据配置和硬件情况等创建至少一个生产者线程,并为每个生产者线程创建一个默认的消费者线程,此时服务器中的生产者线程和消费者线程为一对一模式。当服务请求的请求类型(类型标签)有多种时,为每类请求都创建生产者线程,并为每个生产者线程创建一个默认的消费者线程。
20.此外,在系统启动时,观察者线程还创建任务容器线程。
21.创建了生产者线程、消费者线程和任务容器线程之后,对生产者线程、消费者线程和任务容器线程进行初始化。
22.对生产者线程进行初始化时,为每个生产者线程分配一个生产者线程索引和任务对象缓存,并将生产者线程索引传入任务容器线程。其中,每个生产者线程的任务对象缓存设置有所保存的工作任务对象数量的缓存任务最大阈值和缓存任务最小阈值,该缓存任务最大阈值和缓存任务最小阈值在观察者线程启动时根据配置或者服务器机器的硬件信息动态生成,每个任务对象缓存所对应的缓存任务最大阈值和缓存任务最小阈值可相同也可不同。此外,还为每个生产者线程分配类型标签,该类型标签用于与对应类型标签的服务请求进行匹配。
23.对任务容器线程进行初始化时,读取生产者线程索引,根据生产者线程的数量和类型标签构建对应的任务队列,该任务队列用于缓存工作任务(即服务请求所对应的工作任务对象)。其中,每个任务队列中设置有所能保存的工作任务对象数量的队列任务最大阈值和队列任务最小阈值,每个任务队列所对应的队列任务最大阈值和队列任务最小阈值可相同也可不同。
24.对消费者线程进行初始化时,会被赋予类别标签,通过类型标签标识其可以处理的服务请求所生成的工作任务对象的类型。
25.例如,生产者线程为n个,n个生产者线程所对应的生产者线程索引设置为1至n,则创建n个任务队列,每个任务队列中的每个元素的元素大小根据类型标签来确定,如类型标签为a的服务请求对应的工作任务对象所占用的内存大小最大为1k,则对应的任务队列中的每个元素的元素大小设置为1k;类型标签为b的服务请求对应的工作任务对象所占用的内存大小最大为0.5k,则对应的任务队列中的每个元素的元素大小设置为0.5k。此处元素大小只是示例说明。
26.如图3所示,为本技术实施例提供的初始化后的观察者线程、生产者线程、任务容器线程、消费者线程的示意图。生产者线程用于接收服务请求,服务请求包括服务请求1、服务请求2、
……
、服务请求n;生产者线程包括n类,分别为生产者线程1、生产者线程2、
……
、生产者线程n,对应的生产者线程索引分别为1、2、
……
、n;任务容器线程中包括n类任务队列分别为1类任务队列、2类任务队列、
……
、n类任务队列,每类任务队列的数量为1个;消费者线程包括n类,分别为1类消费者线程、2类消费者线程、
……
、n类消费者线程,每类消费者线程的数量为1个。消费者线程用于处理任务队列中对应的类型标签的工作任务对象。
27.以上描述了在初始化时,生产者线程和消费者线程为一对一模式的情况。
28.需要说明的是,在其他实施例中,生产者线程也可以为一个,该一个生产者线程可以接收多种类型的服务请求,或者该一个生产者线程只接收一类的服务请求,对应地,消费者线程可以为一个或者多个;当消费者线程为一个时,可以处理多种类型的服务请求,或者
只处理一类的服务请求;当消费者线程为多个时,该多个消费者线程同时处理一类的服务请求或者多个消费者线程分别处理不同类型的服务请求。在一实施例中,处理每类服务请求的生产者线程可以为一个,也可以为多个;每类生产者线程所对应的消费者线程的数量可以为一个,也可以多个。生产者线程和消费者线程的具体数量,可根据实际应用场景的实际需求来确定。
29.102,通过生产者线程接收服务请求,并将服务请求所对应的工作任务对象加入至对应的任务对象缓存。
30.服务请求由客户端发起,服务请求中携带有类型标签和请求参数。类型标签可以用关键字标识,也可以用数字或者字符串标识。例如,用1、2、3、4等标识四种不同的类型标签。
31.在一实施例中,当生产者线程为一个时,生产者线程接收服务请求,并将服务请求所对应的工作任务对象加入至对应的任务对象缓存。
32.在一实施例中,当生产者线程为多个时,步骤102,包括:通过各生产者线程接收服务请求,并根据服务请求的类型标签匹配与各生产者线程自身类型标签相同的服务请求;通过各生产者线程将匹配到的服务请求所对应的工作任务对象加入至对应的各任务对象缓存。例如,服务请求的类型标签为1,根据服务请求的类型标签匹配与各生产者线程自身类型标签相同的服务请求,对应地,可确定由生产者线程1来处理该服务请求,生产者线程根据服务请求生成对应的工作任务对象,并将该工作任务对象加入至生产者线程1对应的任务对象缓存。
33.在一实施例中,将服务请求所对应的工作任务对象加入至对应的(各)任务对象缓存的步骤,包括:通过生产者线程获取服务请求中携带的请求参数;将请求参数还原成数据对象,为数据对象添加工作任务头,以生成对应的工作任务对象,通过生产者线程将工作任务对象加入至对应的(各)工作对象缓存。
34.如图4所示,为本技术实施例提供的生产者线程的处理逻辑示意图。每个生产者线程中包括请求验证器、分类器、标签处理器和任务对象缓存。
35.其中,当生产者线程匹配到与自身类型标签相同的请求时,使用请求验证器来验证服务请求是否合法;若合法的话,将服务请求转发给分类器,若不合法的话,直接返回错误码给客户端。
36.分类器获取服务请求,读取服务请求中携带的请求参数。需要注意的是,服务请求中传入的请求参数采用字符串携带,因此,分类器读取了请求参数后,需要进行还原,将请求参数还原成数据对象,即分类器根据请求参数生成数据对象。这些请求参数供消费者线程使用,是消费者线程进行业务计算时,必须使用的参数。例如,将使用字符串表示的请求参数中的请求地址、目标摄像头等还原/封装成数据对象;或者将使用字符串表示的请求参数中的请求地址、对目标摄像头的操作类型(如调整目标摄像头角度等)等还原/封装成数据对象。
37.分类器得到数据对象后,将数据对象发送给标签处理器,标签处理器为数据对象添加工作任务头,以生成工作任务对象。工作任务头中包括任务标签,任务标签包括请求时间、过期时间、优先级、来源、任务状态等。需要注意的是,任务标签不参与业务计算,消费者线程在进行任务处理时,只读取工作任务对象中还原/封装的请求参数,不会读取任务标
签。任务标签用于任务容器线程、观察者线程对工作任务对象的处理。
38.标签处理器将所生成的工作任务对象(即添加了工作任务头的数据对象)加入至生产者线程中的任务对象缓存。到此生产者线程的逻辑处理完毕,生产者线程接着处理下一个服务请求,或者等待下一个服务请求的到来。任务对象缓存后续供工作容器线程和观察者线程进行读取。
39.可以理解地,每个生产者线程均有自己的任务对象缓存,生产者线程接收服务请求,生成服务请求所对应的工作任务对象,并将工作任务对象加入至对应的任务对象缓存。为了将生产者线程和消费者线程完全解耦,提高吞吐率,生产者线程在将工作任务对象加入至任务对象缓存中之后,便认为自身工作已经结束,等待或者处理下一个服务请求。
40.可以理解地,生产者线程不进行具体地比较费时地实际工作任务计算,实际工作任务计算由消费者线程来处理,如此,分离生产者线程和消费者线程,同时生产者线程不会因为大量并发造成资源紧张。简单理解,因为生产者只需要根据服务请求制造工作任务对象,而不处理具体事务(实际工作任务),其处理速度约等于所在机器给系统分配的物理极限,且在未到达极限前,理论上不会存在因生产者处理不过来而导致的服务请求丢失。如此,一方面,分离了生产者线程和消费者线程,实现生产者线程和消费者线程完全解耦,另一方面,避免服务请求的丢失。
41.103,通过任务容器线程读取任务对象缓存中的工作任务对象,将工作任务对象存放入对应的任务队列,并从任务对象缓存中移除工作任务对象。
42.任务容器线程持续遍历每个生产者线程,如可依照生产者线程索引来遍历每个生产者线程,读取每个生产者线程对应的任务对象缓存,并将对应的任务对象缓存中的工作任务对象加入至对应的任务队列中。可以理解地,任务容器线程会即时地从生产者线程对应的任务对象缓存中读取工作任务对象,以确保任务对象缓存中的工作任务对象的数量低于最大阈值。
43.将工作任务对象加入至对应的任务队列中之后,将工作任务对象从对应的任务对象缓存中移除,并修改加入至对应的任务队列中的工作任务对象的任务状态为未处理。
44.在一实施例中,当生产者线程为一个时,任务容器线程中的任务队列可以为一个,也可以为多个。例如,当生产者线程只接收一个类别标签的服务请求时,对应的任务队列为一个,意味着该一个任务队列保存该类别标签的工作任务对象(工作任务对象根据服务请求生成),对应的消费者线程的数量可以为一个或者多个;对应的任务队列为多个时,意味着该多个任务队列同时保存该类别标签的工作任务对象,对应的消费者线程的数量可以为一个或者多个。
45.在一实施例中,当生产者线程为多个,且各生产者线程处理不同类别标签的服务请求时,任务容器线程中的任务队列为多个,每个任务队列保存一个类别标签对应的所有工作任务对象,对应地,消费者线程的数量可以为多个,每个消费者线程处理一个类别标签的所有工作任务对象。
46.在该实施例中,步骤103,包括:通过任务容器线程从各任务对象缓存中读取工作任务对象,根据工作任务对象的类型标签或者工作任务对象所属的生产者线程所对应的类型标签,将工作任务对象存放入与类型标签匹配的任务队列;或者通过任务容器线程从各任务对象缓存中读取工作任务对象,根据工作任务对象所属的生产者线程索引,将工作任
务对象存放入与生产者线程索引匹配的任务队列。例如,任务容器线程读取的工作任务对象所属的生产者线程为生产者线程1,其处理的类型标签为1,生产者线程索引为1,因此将该工作任务对象存放入与类型标签匹配的任务队列,1类任务队列;或者将该工作任务对象存放入与生产者线程索引匹配/对应的任务度列,1类任务队列。
47.在一些实施例中,当生产者线程为多个时,任务容器线程中的任务队列也可以为一个,消费者线程也可以为一个或者多个等。
48.如图5所示,为本技术实施例提供的任务容器线程的处理逻辑示意图。任务容器线程包括任务管理器、生产者线程索引缓存和任务队列管理器。其中,任务队列管理器包括多类任务队列,如1类任务队列、2类任务队列、
……
、n类任务队列等,每类任务队列中存储对应类型标签的工作任务对象以及任务状态等。生产者线程索引缓存中存储着生产者线程索引与任务队列的对应关系。
49.任务管理器用于持续遍历每个生产者线程,读取每个生产者线程中的任务对象缓存,并将任务对象缓存中的工作任务对象放入至与工作任务对象所属的生产者线程索引对应的任务队列中,同时在任务对象缓存中移除工作任务对象。任务队列管理器用于将刚读取且放入至任务队列的工作任务对象的任务状态修改为未处理。
50.由上述内容可知,任务容器线程用于读取任务对象缓存中的工作任务对象,并将不同类型(类型标签)的工作任务对象放入至对应的任务队列,且维护该任务队列中的工作任务对象的任务状态。
51.104,通过消费者线程从任务队列中,读取任务状态为未处理的工作任务对象以进行处理,并在处理完成后,更新工作任务对象的任务状态为已完成。
52.任务容器线程中的工作任务对象由消费者线程读取,消费者线程在被观察者线程创建时,会赋予一个类型标签,该类型标签标识了消费者线程可取得哪类的工作任务对象。
53.消费者线程的处理设计较为单一,主要是为了避免多余计算占用处理时间。
54.在一实施例中,所述通过消费者线程从任务队列中,读取任务状态为未处理的工作任务对象以进行处理的步骤,包括:通过消费者线程从任务队列中,读取任务状态为未处理的工作任务对象;根据工作任务对象调用统一的处理入口接口;利用处理入口接口调用工作任务对象中的数据对象来进行处理。
55.消费者线程读取对应的工作任务对象后,按照工作任务对象的请求参数来进行数据处理,每个消费者线程均通过接口设计成统一的处理入口接口,利用处理入口接口调用工作任务对象中的数据对象来进行处理,即由不同的实际处理对象实现该处理入口接口进行实际处理,以得到处理结果,并根据处理结果响应客户端。
56.需要注意的是,在消费者线程获取/读取任务状态为未处理的工作任务对象后,修改工作任务对象的任务状态,将该工作任务对象的任务状态修改为处理中,避免其他同类消费者再次处理。在消费者线程将对应的工作任务对象处理完毕后,修改工作任务对象的任务状态,将该工作任务对象的任务状态修改为已处理。
57.可以看出,本技术实施例中的消费者线程主要用于从任务队列中获取未处理的工作任务对象进行任务处理,而上文中的生产者线程主要用于接收服务请求,根据服务请求生成工作任务对象,并将工作任务对象加入至对应的任务对象缓存。如此,将生产者线程和消费者线程彻底分离,实现了生产者线程和消费者线程的解耦,使得生产者线程可以无需
关心处理逻辑,避免生产者线程因处理逻辑较长或产生异常导致服务请求得不到处理或丢失的问题。
58.105,通过任务容器线程将任务队列中的任务状态为已完成的工作任务对象进行清理。
59.任务容器线程的任务队列管理器会将任务队列中的任务状态为已完成的工作任务对象进行清理,或者将已超时的工作任务对象进行清理,工作任务对象是否超时,根据任务标签中的请求时间、过期时间等来进行确定。其中,任务容器线程的任务队列管理器会定期进行清理。如每隔1分钟等。
60.以上步骤102至步骤105是持续执行的过程,在系统启动后,生产者线程、任务容器线程、消费者线程初始化后,会一直执行。需要注意的是,本技术实施例中的系统指的是服务器提供服务的系统。
61.106,通过观察者线程监控生产者线程、任务容器线程和消费者线程。
62.观察者线程启动,且生产者线程、任务容器线程、消费者线程初始化后,观察者线程监控生产者线程、任务容器线程、消费者线程。
63.观察者线程监控生产者线程、任务容器线程、消费者线程是否出现异常终止,且在出现异常进行异常处理;以及监控生产者线程、任务容器线程、消费者线程的状况,如生产者线程的任务对象缓存中的工作任务对象的数量、任务容器线程的任务队列中的工作任务对象的数量等,并根据对应的状况调整生产者线程、消费者线程、任务容器线程这三者之间的资源和配比。
64.在一实施例中,任务处理方法,还包括:通过观察者线程为各生产者线程、各消费者线程、任务容器线程建立异常触发器;当检测到各生产者线程、各消费者线程或者任务容器线程中存在异常线程时,调用对应的异常触发器重启异常线程。
65.如图6所示,为本技术实施例提供的观察者线程的处理逻辑示意图。观察者线程包括异常触发器、资源管理器、调度管理器和线程处理逻辑。
66.其中,异常触发器包括安插/建立在每个生产者线程、每个消费者线程、任务容器线程中的回调方法,如果任一生产者线程、任一消费者线程或者任务容器线程出现异常,如异常终止,调用对应线程中的异常触发器,以调用线程处理逻辑进行清理和重启异常线程。
67.调度管理器监控每个生产者线程的任务对象缓存,以及任务容器线程的每个任务队列,即对每个生产者线程的任务对象缓存以及其在任务容器线程中的工作队列进行检查。例如,检查任务容器线程的任务队列中的任务状态、检查任务对象缓存中的工作任务对象的数量等等。当检测到工作任务对象存在堆积时,调度管理器调用线程处理逻辑增加对应的消费者线程。
68.资源管理器监控每个生产者线程的任务对象缓存,以及任务容器线程的每个任务队列中,以及监控服务器端的资源、资源利用率等。例如,监控服务器端的资源利用率是否达到配置的最大值,监测任务容器线程的任务队列中的任务状态、检查任务对象缓存中的工作任务对象的数量等。当监测到服务器端的资源利用率达到配置的最大值或者监测到工作任务对象存在消耗时,调度管理器调用线程处理逻辑暂停或者减少/回收对应的消费者线程。
69.上述只是监控的一些举例说明,可以理解地,观察者线程可以根据实际需求监控
生产者线程、任务容器线程、消费者线程中的任意内容。
70.107,当监测到工作任务对象存在堆积时,通过观察者线程新增消费者线程,以通过新增的消费者线程来处理堆积的工作任务对象。
71.当监测到某类任务对象缓存(将某类任务对象缓存称为目标任务对象缓存)中的工作任务对象存在堆积,和/或监测到某类任务队列(将某个任务队列称为目标任务队列)中的工作任务对象存在堆积,则确定监测到工作任务对象存在堆积,通过观察者线程新增对应的消费者线程,以通过新增的消费者线程来处理堆积的工作任务对象。其中,堆积可理解为工作任务对象的数量达到/超过最大阈值,或者工作任务对象的数量达到/超过最大阈值的时间大于预设时间。
72.在一实施例中,监测到目标任务对象缓存中的工作任务对象存在堆积的步骤,包括:当监测到目标任务对象缓存中的工作任务对象的第一数量达到/超过该目标任务对象缓存对应的缓存任务最大阈值时,或者,当监测到目标任务对象缓存中的工作任务对象的第一数量达到/超过该目标任务对象缓存对应的缓存任务最大阈值的时间达到第一预设时间时,则确定监测到目标任务对象缓存中的工作任务对象存在堆积。
73.在一实施例中,监测到目标任务队列中的工作任务对象存在堆积的步骤,包括:当监测到目标任务队列中的工作任务对象的第二数量达到/超过该目标任务队列对应的队列任务最大阈值时,或者当监测到目标任务队列中的工作任务对象的第二数量达到/超过该目标任务队列对应的队列任务最大阈值的时间达到第二预设时间时,则确定目标任务队列中的工作任务对象存在堆积。
74.在一实施例中,监测到目标任务队列中的工作任务对象存在堆积的步骤,包括:当检测到目标任务队列中任务状态为未处理的工作任务对象的第三数量达到/超过该目标任务队列对应的第一预设数量(该第一预设数量小于队列任务最大阈值)时,和/或当检测到目标任务队列中任务状态为超时的工作任务对象的第四数量达到/超过该目标任务队列对应的第二预设数量(该第一预设数量小于队列任务最大阈值)时;或者当检测到目标任务队列中任务状态为未处理的工作任务对象的第三数量达到/超过该目标任务队列对应的第一预设数量的时间达到第三预设时间时,和/或当检测到目标任务队列中任务状态为超时的工作任务对象的第四数量达到/超过该目标任务队列对应的第二预设数量的时间达到第四预设时间时,确定检测到目标任务队列中的工作任务对象存在堆积。
75.其中,第一预设时间、第二预设时间、第三预设时间、第四预设时间可相同,也可各不相同,第一预设数量和第二预设数量可相同,也可不相同。
76.其中,当确定监测到工作任务对象存在堆积时,获取存在堆积的工作任务对象对应的目标类型标签,通过观察者线程新增与目标类型标签匹配的消费者线程,以通过新增的消费者线程来处理堆积的工作任务对象。具体地,调用线程处理逻辑增加与目标类型标签匹配的消费者线程。其中,新增的消费者线程的数量可以为1。例如,在新增之前,对应的消费者线程的数量为1,新增1个之后,对应的消费者线程的数量为2。
77.可理解地,当观察者线程监测到某类工作任务对象存在堆积或者持续堆积时,表示生产者线程所生产的工作任务对象,消费者线程无法及时消耗,则需要对消费者线程进行扩容,将创建新的消费者线程,利用新创建的消费者处理该类工作任务对象,以避免出现
丢失情况。
78.例如,将监测到生产者线程2中的任务对象缓存中的工作任务对象存在堆积,对应的,生产者线程2所对应的目标类型标签为2,则新增与目标类型标签为2匹配的消费者线程;例如,当监测到任务容器线程中的2类任务队列中的工作任务对象存在堆积,对应地,2类任务队列中所对应的工作任务对象的目标类型标签为2,则新增与目标类型标签为2匹配的消费者线程。
79.该步骤限定了当观察者线程检测到工作任务对象存在堆积时,通过增加消费者线程,以使得所有的工作任务对象都会进行处理,提高服务请求的处理速度,提高并发处理性能,避免服务请求丢失。
80.108,当监测到工作任务对象存在消耗时,通过观察者线程暂停或者减少与目标类型标签对应的消费者线程。
81.当监测到某类任务对象缓存(将某类任务对象缓存称为目标任务对象缓存)中的工作任务对象存在消耗,和/或监测到某类任务队列(将某类任务队列称为目标任务队列)中的工作任务对象存在消耗,则确定监测到工作任务对象存在消耗,通过观察者线程暂停或者减少/回收对应的消费者线程。其中,消耗可理解为工作任务对象的数量为零或者小于最小阈值,或者,工作任务对象的数量为零或者小于最小阈值的时间达到预设时间。
82.在一实施例中,监测到目标任务对象缓存中的工作任务对象存在消耗的步骤,包括:当监测到目标任务对象缓存中的工作任务对象的第一数量为零,或者第一数量小于该目标任务对象缓存对应的缓存任务最小阈值,或者第一数量为零的时间达到第一预设时间,或者第一数量小于该目标任务对象缓存对应的缓存任务最小阈值的时间达到第一预设时间时,则确定监测到目标任务对象缓存中的工作任务对象存在消耗。
83.在一实施例中,监测到目标任务队列中的工作任务对象存在消耗的步骤,包括:当监测到目标任务队列中的工作任务对象的第二数量为零,或者第二数量小于该目标任务队列对应的队列任务最小阈值,或者第二数量为零的时间达到第二预设时间,或者第二数量小于该目标任务队列对应的队列任务最小阈值的时间达到第二预设时间时,则确定目标任务队列中的工作任务对象存在消耗。
84.在一实施例中,监测到目标任务队列中的工作任务对象存在消耗的步骤,包括:当检测到目标任务队列中任务状态为未处理的工作任务对象的第三数量为零,或者第三数量为零的时间达到第三预设时间时,确定检测到目标任务队列中的工作任务对象存在消耗。
85.其中,当确定监测到工作任务对象存在消耗时,通过观察者线程暂停或者减少/回收对应的消费者线程。具体地,所述通过观察者线程暂停或者减少/回收对应的消费者线程的步骤,包括:通过观察者线程获取存在消耗的工作任务对象对应的目标类型标签,并获取目标类型标签对应的消费者线程的线程数量;当线程数量为一个时,暂停该消费者线程;当线程数量大于一时,减少/回收与目标类型标签对应的消费者线程,如减少/回收对应的一个消费者线程。其中,减少/回收目标类型标签对应的消费者线程,可理解为销毁/回收一个目标类型标签对应的消费者线程,以回收系统资源,为其他任务提供运算资源。其中,暂停消费者线程之后,可间隔一段时间后再启动该消费者线程,或者检测到目标类型标签对应的工作任务对象的数量不为零时,启动该消费者线程。
86.可理解地,当监测到工作任务对象存在消耗时,如工作任务对象数量小于对应的
最小阈值或者工作任务对象数量为零时,则认为消费者线程过多,检查消费者线程,如果消费者线程为多个,则回收该类消费者线程,回收对应的系统资源,避免占用了其他类型的消费者线程空间。
87.该实施例中通过观察者线程来监控生产者线程、任务容器线程和消费者线程,当监测到工作任务对象存在堆积时,通过观察者线程新增消费者线程,当监测到工作任务对象存在消耗时,通过观察者线程暂停或者减少/回收消费者线程,实现了对消费者线程的动态管理,平衡生产者线程和消费者线程的数量,以确保生产者线程和消费者线程处于一个平衡的关系,使得系统达到动态平衡。通过观察者线程来检测生产任务状况(工作任务对象),动态创建和回收消费者线程,即观察者线程可随着生产任务(工作任务对象)的并发增加或减少智能生成或销毁消费者线程,提高系统性能和吞吐率,使得系统整体吞吐量和性能得到较大提高,避免高并发下服务请求的丢失。
88.图7为本技术实施例提供的任务处理方法的另一流程示意图,该任务处理方法包括如下步骤。
89.201,通过观察者线程创建多个生产者线程、多个消费者线程和任务容器线程,并将各生产者线程、各消费者线程和任务容器线程进行初始化,其中,各生产者线程均包括一任务对象缓存。
90.202,通过各生产者线程接收服务请求,并根据服务请求的类型标签匹配与各生产者线程自身类型标签相同的服务请求。
91.203,通过各生产者线程将匹配到的服务请求所对应的工作任务对象加入至对应的各任务对象缓存。
92.在一实施例中,通过各生产者线程将匹配到的服务请求所对应的工作任务对象加入至对应的各任务对象缓存的步骤,包括:通过各生产者线程获取匹配到的服务请求中携带的请求参数;将请求参数还原成数据对象;为数据对象添加工作任务头,以生成对应的工作任务对象;通过对应的生产者线程将工作任务对象加入至对应的任务对象缓存。
93.204,通过任务容器线程从各任务对象缓存中读取工作任务对象,根据工作任务对象的类型标签将工作任务对象存放入与类型标签匹配的任务队列;或者根据工作任务对象的所属的生产者线程对应的生产者线程索引,将工作任务对象存放入与生产者线程索引匹配的任务队列。
94.205,通过各消费者线程从相匹配的类型标签的任务队列中,读取任务状态为未处理的工作任务对象以进行处理,并将该工作任务对象的任务状态修改为处理中。
95.在一实施例中,通过各消费者线程从相匹配的类型标签的任务队列中,读取任务状态为未处理的工作任务对象以进行处理的步骤,包括:通过各消费者线程从相匹配的类型标签的任务队列中,读取任务状态为未处理的工作任务对象;根据工作任务对象调用统一的处理入口接口;利用处理入口接口调用工作任务对象中的数据对象来进行处理。
96.206,在该工作任务对象处理完成后,更新该工作任务对象的任务状态为已完成。
97.207,通过任务容器线程将任务队列中的任务状态为已完成的工作任务对象进行清理。
98.208,通过观察者线程监控各生产者线程、任务容器线程和各消费者线程。
99.209,当监测到目标类型标签的工作任务对象存在堆积时,通过观察者线程新增与
目标类型标签对应的消费者线程,以通过新增的消费者线程来处理目标类型标签的工作任务对象。
100.当监测到目标任务对象缓存所对应的目标类型标签的工作任务对象存在堆积,和/或监测到目标任务队列所对应的目标类型标签的工作任务对象存在堆积,则确定监测到目标类型标签的工作任务对象存在堆积,则通过观察者线程新增与目标类型标签对应的消费者线程,以通过新增的消费者线程来处理目标类型标签的工作任务对象。
101.在一实施例中,目标任务对象缓存中缓存的工作任务对象为目标类型标签的工作任务对象,目标任务队列中保存的工作任务对象为目标类型标签的工作任务对象。
102.其中,监测到目标任务对象缓存所对应的目标类型标签的工作任务对象存在堆积,与上文中所述的监测到目标任务对象缓存中的工作任务对象存在堆积的步骤一致;监测到目标任务对象缓存所对应的目标类型标签的工作任务对象存在堆积,与上文中所述的监测到目标任务队列中的工作任务对象存在堆积的步骤一致,请参看上文中对应的描述,在此不再赘述。
103.210,当监测到目标类型标签的工作任务对象存在消耗时,通过观察者线程暂停或者减少与目标类型标签对应的消费者线程。
104.当监测到目标任务对象缓存所对应的目标类型标签的工作任务对象存在消耗,和/或监测到目标任务队列所对应的目标类型标签的工作任务对象存在消耗,则确定监测到目标类型标签的工作任务对象存在消耗,则通过观察者线程暂停或者减少/回收与目标类型标签对应的消费者线程。
105.在一实施例中,目标任务对象缓存中缓存的工作任务对象为目标类型标签的工作任务对象,目标任务队列中保存的工作任务对象为目标类型标签的工作任务对象。
106.当确定监测到目标类型标签的工作任务对象存在消耗时,通过观察者线程暂停或者减少/回收与目标类型标签对应的消费者线程。具体地,所述通过观察者线程暂停或者减少/回收与目标类型标签对应的消费者线程的步骤,包括:通过观察者线程获取目标类型标签对应的消费者线程的线程数量;当线程数量为一个时,暂停该消费者线程;当线程数量大于一时,减少/回收与目标类型标签对应的消费者线程,如减少对应的一个消费者线程。其中,减少/回收目标类型标签对应的消费者线程,可理解为销毁目标类型标签对应的一个消费者线程,以回收系统资源,为其他任务提供运算资源。
107.其中,监测到目标任务对象缓存所对应的目标类型标签的工作任务对象存在消耗,与上文中所述的监测到目标任务对象缓存中的工作任务对象存在消耗的步骤一致;监测到目标任务对象缓存所对应的目标类型标签的工作任务对象存在消耗,与上文中所述的监测到目标任务队列中的工作任务对象存在消耗的步骤一致,请参看上文中对应的描述,在此不再赘述。
108.该实施例中未详细描述的步骤请参看上文中对应步骤的描述,且达到的有益效果也参看上文中对应步骤的描述,在此不再赘述。
109.该实施例中限定了生产者线程为多个,且可处理多种不同类型标签的处理请求,对应的,任务容器线程中包括多种不同类型标签的任务队列,且对应消费者线程可读取对应任务队列中的工作任务对象以进行处理。
110.图8是本技术实施例提供的任务处理装置的结构示意图,该任务处理装置包括创
建模块301、生产者模块302、任务容器模块303、消费者模块304、监控模块305以及新增模块306。
111.创建模块301,用于通过观察者线程创建至少一个生产者线程、至少一个消费者线程和任务容器线程,并将所述生产者线程、所述消费者线程和所述任务容器线程进行初始化,其中,每个生产者线程均包括一任务对象缓存。
112.生产者模块302,用于通过所述生产者线程接收服务请求,并将所述服务请求所对应的工作任务对象加入至对应的任务对象缓存。
113.任务容器模块303,用于通过任务容器线程读取所述任务对象缓存中的工作任务对象,将所述工作任务对象存放入对应的任务队列,并从所述任务对象缓存中移除所述工作任务对象。
114.消费者模块304,用于通过所述消费者线程从所述任务队列中,读取任务状态为未处理的工作任务对象以进行处理,并在处理完成后,更新所述工作任务对象的任务状态为已完成。
115.任务容器模块303,还用于通过所述任务容器线程将所述任务队列中的任务状态为已完成的工作任务对象进行清理。
116.监控模块305,用于通过所述观察者线程监控所述生产者线程、所述任务容器线程和所述消费者线程。
117.新增模块306,用于当监测到工作任务对象存在堆积时,通过所述观察者线程新增消费者线程,以通过新增的消费者线程来处理堆积的工作任务对象。在一实施例中,如图8所示,任务处理装置还包括回收模块307。回收模块307,用于当监测到工作任务对象存在消耗时,通过所述观察者线程暂停或者减少与所述目标类型标签对应的消费者线程。
118.在一实施例中,当生产者线程为多个,消费者线程为多个时,生产者模块302,具体用于通过各生产者线程接收服务请求,并根据所述服务请求的类型标签匹配与各生产者线程自身类型标签相同的服务请求;通过各生产者线程将匹配到的服务请求所对应的工作任务对象加入至对应的各任务对象缓存。
119.任务容器模块303,具体用于通过所述任务容器线程从各任务对象缓存中读取工作任务对象,根据所述工作任务对象的类型标签将所述工作任务对象存放入与所述类型标签匹配的任务队列;或者根据所述工作任务对象的所属的生产者线程对应的生产者线程索引,将所述工作任务对象存放入与生产者线程索引匹配的任务队列。
120.消费者模块304,具体用于通过各消费者线程从相匹配的类型标签的任务队列中,读取任务状态为未处理的工作任务对象以进行处理,并在处理完成后,更新所述工作任务对象的任务状态为已完成。
121.新增模块306,具体用于当监测到目标类型标签的工作任务对象存在堆积时,通过所述观察者线程新增与所述目标类型标签对应的消费者线程,以通过新增的消费者线程来处理目标类型标签的工作任务对象。
122.回收模块307,具体用于当监测到目标类型标签的工作任务对象存在消耗时,通过观察者线程暂停或者减少与目标类型标签对应的消费者线程。
123.具体实施时,以上各个单元可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现。以上装置和各单元的具体实现过程,以及所达到的有益效果,
可以参考前述方法实施例中的相应描述,为了描述的方便和简洁,在此不再赘述。
124.本技术实施例还提供一种电子设备,如图9所示,其示出了本技术实施例所涉及的电子设备的结构示意图,具体来讲:该电子设备可以包括一个或者一个以上处理核心的处理器901、一个或一个以上计算机可读存储介质的存储器902、射频(radio frequency,rf)电路903、电源904、输入单元905、以及显示单元906等部件。本领域技术人员可以理解,图中示出的电子设备结构并不构成对电子设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:处理器901是该电子设备的控制中心,其中,处理器利用各种接口和线路连接整个电子设备的各个部分,通过运行或执行存储在存储器902内的软件程序和/或模块,以及调用存储在存储器902内的数据,执行电子设备的各种功能和处理数据,从而对电子设备进行整体监控。可选的,处理器可包括一个或多个处理核心;优选的,处理器可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解地是,上述调制解调处理器也可以不集成到处理器中。
125.存储器902可用于存储软件程序(计算机程序)以及模块,处理器901通过运行存储在存储器902的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器902可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据电子设备的使用所创建的数据等。此外,存储器902可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器902还可以包括存储器控制器,以提供处理器901对存储器902的访问。
126.rf电路903可用于收发信息过程中,信号的接收和发送,特别地,将基站的下行信息接收后,交由一个或者一个以上处理器901处理;另外,将涉及上行的数据发送给基站。通常,rf电路903包括但不限于天线、至少一个放大器、调谐器、一个或多个振荡器、用户身份模块(sim)卡、收发信机、耦合器、低噪声放大器(lna,low noise amplifier)、双工器等。此外,rf电路903还可以通过无线通信与网络和其他设备通信。所述无线通信可以使用任一通信标准或协议,包括但不限于全球移动通讯系统(gsm,global system of mobile communication)、通用分组无线服务(gprs,general packet radio service)、码分多址(cdma,code division multiple access)、宽带码分多址(wcdma,wideband code division multiple access)、长期演进(lte,long term evolution)、电子邮件、短消息服务(sms,short messaging service)等。
127.电子设备还包括给各个部件供电的电源904(比如电池),优选的,电源904可以通过电源管理系统与处理器901逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源904还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
128.该电子设备还可包括输入单元905,该输入单元905可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。具体地,在一个具体地实施例中,输入单元905可包括触敏表面以及其他输入设备。触
敏表面,也称为触摸显示屏或者触控板,可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触敏表面上或在触敏表面附近的操作),并根据预先设定的程式驱动相应的连接装置。可选的,触敏表面可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器901,并能接收处理器901发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触敏表面。除了触敏表面,输入单元905还可以包括其他输入设备。具体地,其他输入设备可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。
129.该电子设备还可包括显示单元906,该显示单元906可用于显示由用户输入的信息或提供给用户的信息以及电子设备的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。显示单元906可包括显示面板,可选的,可以采用液晶显示器(lcd,liquid crystal display)、有机发光二极管(oled,organic light

emitting diode)等形式来配置显示面板。进一步的,触敏表面可覆盖显示面板,当触敏表面检测到在其上或附近的触摸操作后,传送给处理器901以确定触摸事件的类型,随后处理器901根据触摸事件的类型在显示面板上提供相应的视觉输出。虽然在图中,触敏表面与显示面板是作为两个独立的部件来实现输入和输入功能,但是在某些实施例中,可以将触敏表面与显示面板集成而实现输入和输出功能。
130.尽管未示出,电子设备还可以包括摄像头(需要注意的是,该处的摄像头与上述所述的虚拟相机不同,该处的摄像头指的是硬件)、蓝牙模块等,在此不再赘述。具体在本实施例中,电子设备中的处理器901会按照如下的指令,将一个或一个以上的应用程序的线程对应的可执行文件加载到存储器902中,并由处理器901来运行存储在存储器902中的应用程序,从而实现各种功能,如下:通过观察者线程创建至少一个生产者线程、至少一个消费者线程和任务容器线程,并将所述生产者线程、所述消费者线程和所述任务容器线程进行初始化,其中,每个生产者线程均包括一任务对象缓存;通过所述生产者线程接收服务请求,并将所述服务请求所对应的工作任务对象加入至对应的任务对象缓存;通过任务容器线程读取所述任务对象缓存中的工作任务对象,将所述工作任务对象存放入对应的任务队列,并从所述任务对象缓存中移除所述工作任务对象;通过所述消费者线程从所述任务队列中,读取任务状态为未处理的工作任务对象以进行处理,并在处理完成后,更新所述工作任务对象的任务状态为已完成,以及通过所述任务容器线程将所述任务队列中的任务状态为已完成的工作任务对象进行清理;通过所述观察者线程监控所述生产者线程、所述任务容器线程和所述消费者线程;当监测到工作任务对象存在堆积时,通过所述观察者线程新增消费者线程,以通过新增的消费者线程来处理堆积的工作任务对象。
131.该电子设备可以实现本技术实施例所提供的任务处理方法任一实施例中的步骤,因此,可以实现本技术实施例所提供的任一任务处理方法所能实现的有益效果,详见前面的实施例,在此不再赘述。
132.本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令(计算机程序)来完成,或通过指令(计算机程序)控制相关的硬件来完成,该指令
可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。为此,本发明实施例提供一种存储介质,其中存储有多条指令,该指令能够被处理器进行加载,以执行本发明实施例所提供的任务处理方法中任一实施例的步骤。
133.其中,该存储介质可以包括:只读存储器(rom,read only memory)、随机存取记忆体(ram,random access memory)、磁盘或光盘等。
134.由于该存储介质中所存储的指令,可以执行本发明实施例所提供的任一任务处理方法实施例中的步骤,因此,可以实现本发明实施例所提供的任一任务处理方法所能实现的有益效果,详见前面的实施例,在此不再赘述。
135.以上对本技术实施例所提供的一种任务处理方法、装置、电子设备以及存储介质进行了详细介绍,本文中应用了具体个例对本技术的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本技术的方法及其核心思想;同时,对于本领域的技术人员,依据本技术的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本技术的限制。
再多了解一些

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

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

相关文献

  • 日榜
  • 周榜
  • 月榜