CN111552546A - 一种基于多线程的任务实现方法、装置及存储介质 - Google Patents
一种基于多线程的任务实现方法、装置及存储介质 Download PDFInfo
- Publication number
- CN111552546A CN111552546A CN202010304099.XA CN202010304099A CN111552546A CN 111552546 A CN111552546 A CN 111552546A CN 202010304099 A CN202010304099 A CN 202010304099A CN 111552546 A CN111552546 A CN 111552546A
- Authority
- CN
- China
- Prior art keywords
- task
- queue
- sub
- priority
- request
- 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/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer And Data Communications (AREA)
Abstract
本申请公开了一种基于多线程的任务实现方法、装置及存储介质,具体包括:生产者线程生成请求任务并推送给线程池;线程池无空闲消费者线程时,从阻塞队列中确定一个同类子队列,将请求任务添加其中;线程池有空闲消费者线程时,根据预设的资源平衡原则轮流从阻塞队列中确定一个同类子队列作为提取任务同类子队列,提取请求任务并提供给所述消费者线程;消费者线程根据获取的待执行请求任务与业务数据库进行交互,以完成待执行请求任务的实现。应用本申请实施例方案,各用户的请求任务能够及时得到响应,消费者线程也因为执行不同用户的任务请求而避免阻塞,提高了应用系统的整体效率。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种基于多线程的任务实现方法、装置及存储介质。
背景技术
随着计算机技术互联网技术的发展,越来越多的业务通过线上应用系统处理,极大方便了用户的业务需求。在实际应用中,由于用户的数量比较多、业务类型也比较多,应用系统通常采用多线程的方式获取任务,再通过与数据库的交互来实现任务。由于多线程具备并行处理的特点,应用系统可以同时处理多个账户的任务请求,从而使多个用户的业务需求能够快速得到反应,增加了应用系统的效率。
但现有技术中,如果某个用户的业务请求频繁,产生了大量的相同任务名称的请求任务。如果依次执行这些大量的相同任务名称的请求任务,将长时间独占资源,其他用户的业务请求得不到及时响应,而且也容易导致线程阻塞,大大降低了应用系统的整体效率。
发明内容
针对上述现有技术,本发明实施例公开一种基于多线程的任务实现方法,可以克服用户独占资源,线程阻塞的缺陷,达到各用户请求任务及时得到响应,避免线程阻塞,提高应用系统整体效率的目的。
本申请实施例提出的一种基于多线程的任务实现方法,具体为:
一种基于多线程的任务实现方法,该方法包括:
生产者线程根据用户业务生成请求任务并推送给线程池,所述请求任务包括任务优先级和任务名称;
所述线程池无空闲消费者线程时,根据任务优先级和任务名称从阻塞队列中确定一个同类子队列作为添加任务同类子队列,并将所述请求任务添加到所述添加任务同类子队列中;所述同类子队列用于保存相同优先级和任务名称的请求任务;
随后,所述线程池有空闲消费者线程时,根据预设的资源平衡原则轮流从阻塞队列中确定一个同类子队列作为提取任务同类子队列,从所述提取任务同类子队列中确定待执行请求任务并提供给所述消费者线程;
所述消费者线程根据获取的所述待执行请求任务与业务数据库进行交互,以完成所述待执行请求任务的实现。
进一步地,
所述根据任务优先级和任务名称从阻塞队列中确定一个同类子队列作为添加任务同类子队列,并将所述请求任务添加到所述添加任务同类子队列中的步骤包括:
根据所述请求任务的任务优先级从所述阻塞队列的第一级散列表中确定对应的优先级子队列,将对应的优先级子队列作为添加任务优先级子队列,所述第一级散列表用于保存所述任务优先级和对应的优先级子队列,所述优先级子队列中的队列单元用于关联所述同类子队列;
根据所述添加任务优先级子队列判断是否已经存在与所述请求任务有相同任务名称的其他请求任务;
如果存在,则从所述添加任务优先级子队列的第二级散列表确定与所述任务名称对应的同类子队列,将确定的同类子队列作为添加任务同类子队列,并将所述请求任务添加到所述添加任务同类子队列中,所述第二级散列表用于保存所述任务名称和对应的同类子队列;
如果不存在,则从所述添加任务优先级子队列中确定一个队列单元作为添加任务队列单元;创建一个新的同类子队列,将所述请求任务添加到所述新的同类子队列中,并将所述新的同类子队列关联给所述添加任务队列单元;并将所述请求任务的任务名称和所述新的同类子队列对应保存在所述任务优先级子队列的第二级散列表中。
进一步地,
所述根据预设的资源平衡原则轮流从阻塞队列中确定一个同类子队列作为提取任务同类子队列,从所述提取任务同类子队列中确定待执行请求任务并提供给所述消费者线程的步骤包括:
获取被选择优先级和被选择优先级的当前队列单元;
根据所述被选择优先级在所述第一级散列表中获取对应的优先级子队列,将获取的优先级子队列作为提取任务优先级子队列;
从所述提取任务优先级子队列中获取与所述当前队列单元关联的同类子队列,作为提取任务同类子队列;
从所述提取任务同类子队列中获取请求任务;并将所述获取的请求任务从所述提取任务同类子队列中删除,将删除了所述获取的请求任务后的所述提取任务同类子队列重新关联给被选择优先级的下一个队列单元;
根据预设的资源平衡原则更新所述被选择优先级和被选择优先级的当前队列单元;
将从所述提取任务同类子队列中获取的请求任务提供给所述消费者线程。
进一步地,
所述根据预设的资源平衡原则更新所述被选择优先级和被选择优先级的当前队列单元的步骤包括:
判断所述被选择优先级的当前队列单元是否还存在关联的同类子队列;
如果存在,则保持所述被选择优先级和被选择优先级的当前队列单元;
如果不存在,则将所述被选择优先级的遍历步长加1,所述被选择优先级的遍历步长表示遍历所述被选择优先级中队列单元的个数;在所述被选择优先级的遍历步长到达预设的被选择优先级最大步长时,将所述被选择优先级的遍历步长重新初始化为0,将获取的下一个优先级设置为被选择优先级,并将所述下一个优先级的当前队列单元作为被选择优先级的当前队列单元。
本申请实施例还提供一种基于多线程的任务实现装置,可以克服用户独占资源,线程阻塞的缺陷,达到各用户请求任务及时得到响应,避免线程阻塞,提高应用系统整体效率的目的。
一种基于多线程的任务实现装置,该装置包括:
任务生成模块,用于由生产者线程根据用户业务生成请求任务并推送给线程池,所述请求任务包括任务优先级和任务名称;
队列操作模块,用于在所述线程池无空闲消费者线程时,根据任务优先级和任务名称从阻塞队列中确定一个同类子队列作为添加任务同类子队列,并将所述请求任务添加到所述添加任务同类子队列中;所述线程池有空闲消费者线程时,根据预设的资源平衡原则从阻塞队列中确定一个同类子队列作为提取任务同类子队列,从所述提取任务同类子队列中确定待执行请求任务并提供给所述消费者线程;
任务消费模块,用于由所述消费者线程根据获取的所述待执行请求任务与业务数据库进行交互,以完成所述待执行请求任务的实现。
进一步地,
所述队列操作模块包括:
添加任务模块,用于在所述线程池无空闲消费者线程时,根据任务优先级和任务名称从阻塞队列中确定一个同类子队列作为添加任务同类子队列,并将所述请求任务添加到所述添加任务同类子队列中;
提取任务模块,用于在所述线程池有空闲消费者线程时,根据预设的资源平衡原则从阻塞队列中确定一个同类子队列作为提取任务同类子队列,从所述提取任务同类子队列中确定待执行请求任务并提供给所述消费者线程。
进一步地,
所述添加任务模块包括:
添加任务优先级确定模块,用于根据所述请求任务的任务优先级从所述阻塞队列的第一级散列表中确定对应的优先级子队列,将对应的优先级子队列作为添加任务优先级子队列,所述第一级散列表用于保存所述任务优先级和对应的优先级子队列,所述优先级子队列中的队列单元用于关联所述同类子队列;
相同任务判断模块,用于根据所述添加任务优先级子队列判断是否已经存在与所述请求任务有相同任务名称的其他请求任务,如果存在,则从所述添加任务优先级子队列的第二级散列表确定与所述任务名称对应的同类子队列,将确定的同类子队列作为添加任务同类子队列,并将所述请求任务添加到所述添加任务同类子队列中,所述第二级散列表用于保存所述任务名称和对应的同类子队列;如果不存在,则从所述添加任务优先级子队列中确定一个队列单元作为添加任务队列单元;创建一个新的同类子队列,将所述请求任务添加到所述新的同类子队列中,并将所述新的同类子队列关联给所述添加任务队列单元;并将所述请求任务的任务名称和所述新的同类子队列对应保存在所述任务优先级子队列的第二级散列表中。
进一步地,
所述提取任务模块包括:
提取任务定位模块,用于获取被选择优先级和被选择优先级的当前队列单元;根据所述被选择优先级在所述第一级散列表中获取对应的优先级子队列,将获取的优先级子队列作为提取任务优先级子队列;从所述提取任务优先级子队列中获取与所述当前队列单元关联的同类子队列,作为提取任务同类子队列;根据预设的资源平衡原则更新所述被选择优先级和被选择优先级的当前队列单元;
提取任务操作模块,用于从所述提取任务同类子队列中获取请求任务;并将所述获取的请求任务从所述提取任务同类子队列中删除,将删除了所述获取的请求任务后的所述提取任务同类子队列重新关联给被选择优先级的下一个提取任务队列单元;将从所述提取任务同类子队列中获取的请求任务提供给所述消费者线程。
进一步地,
所述提取任务定位模块包括:
第一定位模块,用于获取被选择优先级和被选择优先级的当前队列单元;根据所述被选择优先级在所述第一级散列表中获取对应的优先级子队列,将获取的优先级子队列作为提取任务优先级子队列;从所述提取任务优先级子队列中获取与所述当前队列单元关联的同类子队列,作为提取任务同类子队列;
第二定位模块,用于根据预设的资源平衡原则更新所述被选择优先级和被选择优先级的当前队列单元。
进一步地,所述第二定位模块包括:
关联判断模块,用于判断所述被选择优先级的当前队列单元是否还存在关联的同类子队列;如果存在,则保持所述被选择优先级和被选择优先级的当前队列单元;如果不存在,则将所述被选择优先级的遍历步长加1,所述被选择优先级的遍历步长表示遍历所述被选择优先级中队列单元的个数;在所述被选择优先级的遍历步长到达预设的被选择优先级最大步长时,将所述被选择优先级的遍历步长重新初始化为0,将获取的下一个优先级设置为被选择优先级,并将所述下一个优先级的当前队列单元作为被选择优先级的当前队列单元。
本申请实施例还提供一种计算机可读存储介质,可以克服用户独占资源,线程阻塞的缺陷,达到各用户请求任务及时得到响应,避免线程阻塞,提高应用系统整体效率的目的。
本申请实施例的一种计算机可读存储介质,其上存储有计算机指令,所述指令被处理器执行时可实现上述任一项所述的基于多线程的任务实现方法中的步骤。
本申请实施例还提供一种基于多线程的任务实现的电子设备,可以克服用户独占资源,线程阻塞的缺陷,达到各用户请求任务及时得到响应,避免线程阻塞,提高应用系统整体效率的目的。
一种基于多线程的任务实现的电子设备,该电子设备包括:
处理器;
用于存储所述处理器可执行指令的存储器;
所述处理器,用于从所述存储器中读取所述可执行指令,并执行所述指令以实现上述权利要求1~4任一项所述的基于多线程的任务实现方法的步骤
综上所述,本申请实施例利用独立的同类子队列分别保存不同优先级和任务名称的请求任务,用于区分不同的用户的请求,并按照预设的资源平衡原则从各同类子队列中提取请求任务,交给消费者线程执行,可以满足各用户请求任务及时响应以及避免线程阻塞,提高应用系统整体效率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例基于多线程任务实现的应用场景图。
图2是本申请基于多线程的任务实现方法实施例一的流程图。
图3是本申请实施例中表示阻塞队列的示例一。
图4是本申请实施例中表示阻塞队列的示例二。
图5是本申请实施例向阻塞队列中添加请求任务的方法流程图。
图6是本申请实施例中表示阻塞队列的示例三。
图7是本申请实施例中表示阻塞队列的示例四。
图8是本申请实施例中阻塞队列提取请求任务的方法流程图。
图9是本申请实施例中表示阻塞队列的示例五。
图10是本申请实施例中表示阻塞队列的示例六。
图11是本申请实施例根据预设的资源平衡原则更新被选择优先级和被选择优先级的当前队列单元的具体方法流程图。
图12是本申请实施例中表示阻塞队列的示例七。
图13是本申请基于多线程的任务实现装置实施例一的结构示意图。
图14是本申请基于多线程的任务实现装置实施例二的结构示意图。
图15是本申请装置实施例中提取任务定位模块1308的内部结构示意图。
图16本申请实施基于多线程的任务实现的电子设备结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含。例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其他步骤或单元。
下面以具体实施例对本发明的技术方案进行详细说明。下面几个具体实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。
本申请实施例中,在线程池无空闲消费者线程时,会将相同任务优先级和任务名称的请求任务分别添加到阻塞队列的各同类子队列中。在线程池有空闲消费者线程时,阻塞队列再按照预设的资源平衡原则从各同类子队列中提取任务,交给消费者线程执行。由于阻塞队列是按照资源平衡原则从各同类子队列中提取任务,并不是按照产生请求任务的先后次序提取,因此,即使产生某个用户的大量的相同任务优先级和任务名称的请求任务,阻塞队列也可以从各个同类子队列中轮流提取不同任务优先级和不同任务名称的请求任务。这样,不同用户的任务请求都可以得到及时响应,消费者线程也因为执行不同用户的任务请求而避免阻塞,提高应用系统的整体效率。
图1是本申请实施例基于多线程任务实现的应用场景图。如图所示,该场景大致包括:生产者线程、线程池、消费者线程、阻塞队列、业务数据库。生产者线程生成请求任务推送给线程池,线程池中的消费者线程无空闲时会将请求任务添加到阻塞队列;当线程池中的消费者线程空闲时,由阻塞队列提取出请求任务交给消费者线程;消费者线程再与业务数据库交互以实现请求任务。具体的,图2是本申请基于多线程的任务实现方法实施例一的流程图。如图2所示,该方法包括:
步骤201:生产者线程根据用户业务生成请求任务并推送给线程池,所述请求任务包括任务优先级和任务名称。
在基于多线程的任务实现方案中,线程的角色包括:生产者线程和消费者线程。其中,生产者线程是根据用户业务生成请求任务的线程,而消费者线程则是执行请求任务的线程。为了区分不同的请求任务,每一个请求任务都会有自身的任务名称,同一用户可能会产生相同任务名称的请求任务。
另外,为了更好地平衡资源,本申请实施例还为不同请求任务设置了不同的任务优先级。
步骤202:线程池无空闲消费者线程时,根据任务优先级和任务名称从阻塞队列中确定一个同类子队列作为添加任务同类子队列,并将所述请求任务添加到所述添加任务同类子队列中;所述同类子队列用于保存相同优先级和任务名称的请求任务。
实际应用中,生产者线程将生成的请求任务会推送给线程池,如果线程池中的消费者线程空闲,则可以直接执行该请求任务,而如果线程池中的消费者线程无空闲,得不到及时执行的请求任务将会被添加到阻塞队列中,等待消费者线程空闲时阻塞队列再提取请求任务由消费者线程执行。
如果某个用户产生大量的请求任务,本申请实施例并不会如现有技术一样依次保存在阻塞队列中,而是添加到某个同类子队列中,所述同类子队列用于保存相同优先级和任务名称的请求任务。由于保存的优先级和任务名称相同,属于同一种类型的任务,因此本申请实施例称为同类子队列。
图3是本申请实施例中表示阻塞队列的示例一。如图3所示,假设有来自5个不同用户的若干请求任务。其中,用户A产生的任务优先级为1,任务名称为“A”,添加到同类子队列“a”中;用户B产生的任务优先级为1,任务名称为“B”,添加到同类子队列“b”中;用户C产生的任务优先级为1,任务名称为“C”,添加到同类子队列“c”中;用户D产生的任务优先级为2,任务名称为“D”,添加到同类子队列“d”中;用户E产生的任务优先级为3,任务名称为“E”,添加到同类子队列“e”中。各个同类子队列是分开单独保存的。
步骤203:随后,线程池有空闲消费者线程时,根据预设的资源平衡原则轮流从阻塞队列中确定一个同类子队列作为提取任务同类子队列,从所述提取任务同类子队列中确定待执行请求任务并提供给所述消费者线程。
由于本申请实施例中的同类子队列是分开单独存在的,阻塞队列不依次执行,而是按照预设资源平衡原则轮流从各个同类子队列提取请求任务。这里所述资源平衡原则是一种为了均衡各用户占有消费者线程资源的原则,因此称为资源平衡原则。资源平衡并不是使所有用户的请求任务都完全平等地执行,而是避免某个用户的请求任务独占资源情况的发生。比如:可以规定优先级1~优先级3的任务请求被执行的比例为4:2:1,而同一优先级内的不同用户的请求任务按照同比例执行。这里仅仅列举一种资源平衡原则,实际应用中可以由应用本申请方案的用户自行确定。
步骤204:消费者线程根据获取的所述待执行请求任务与业务数据库进行交互,以完成所述待执行请求任务的实现。
实际应用中,实现某个用户业务时,消费者线程在执行用户的请求任务时还与业务数据库进行交互获取必要的业务数据以实现任务。另外,本领域技术人员知道,当业务数据库在处理针对某个用户的请求任务时,为了避免操作混乱,会针对该用户加锁。此时,只有执行该请求任务的消费者线程处于活动状态,而执行该用户其余请求任务的消费者线程将被阻塞不再执行。
因此,应用本申请实施例方案,步骤202中的请求任务会按照任务优先级和任务名称添加到阻塞队列各个同类子队列中,再由步骤203中的阻塞队列按照预设的资源平衡原则从各个同类子队列中提取请求任务,无需持续依次执行某个用户的任务请求,可以轮流执行各个用户的任务请求,从而达到资源均衡的目的。另外,正是由于各个用户的任务请求可以被均衡轮流执行,各个消费者线程不会同时执行同一个用户的任务请求,从而避免线程阻塞,提高应用系统的整体效率。
为了快速添加任务,本申请还提出一种利用散列表的方式进行添加任务。在该实施例方案中,预先设置了两级散列表以及和每一个优先级对应的优先级子队列。其中,第一级散列表用于保存任务优先级和对应的优先级子队列,第二级散列表用于保存任务名称和对应的同类子队列,优先级子队列中的队列单元用于关联所述同类子队列。
图4是本申请实施例中表示阻塞队列的示例二。其中,阻塞队列包括各个同类子队列401、优先级子队列402、第一级散列表403、第二级散列表404以及请求任务405。本领域技术人员知道,散列表是一种保存键值对(key-value)的存储机制,通过key可以快速获取对应的value值。本实施例为了能够快速定位需要添加请求任务的位置,利用了这类散列表,其具体方法如下所述。
图5是本申请实施例向阻塞队列中添加请求任务的方法流程图。如图5所示,该方法包括:
步骤501:根据所述请求任务的任务优先级从阻塞队列的第一级散列表中确定对应的优先级子队列,将对应的优先级子队列作为添加任务优先级子队列,所述第一级散列表用于保存所述任务优先级和对应的优先级子队列,所述优先级子队列中的队列单元用于关联所述同类子队列。
如前所述,当消费者线程无空闲时,线程池会将请求任务添加到阻塞队列中。本申请实施例中的生产者线程在生成请求任务时,会确定该请求任务的任务优先级和任务名称。实际应用中,针对某个用户产生的请求任务的任务名称相同,比如用户A产生的若干请求任务的任务名称都可以为“A”,表示这些任务来自于用户A。而任务优先级则可以由应用系统根据实际情况自行确定,比如某些用户属于重要用户,就可以为其设置比较高的优先级,为其余用户设置比较低的优先级。至于具体如何设置优先级,可以根据情况自定,此处不再赘述。
由于本申请实施例将各个同类子队列分成不同优先级,在添加请求任务,首先需要根据第一级散列表确定该请求任务所属的优先级子队列。优先级子队列并非真正保存请求任务的队列,而是将相同优先级的各个同类子队列关联在一起的结构。如图4所示,第一级优先级包括三个同类子队列,分别保存“a”、“b”、“c”三个同类子队列,并同时关联在第一级优先级子队列的队列单元中。其他第二优先级和第三优先级也有类似情况,此处不赘述。由于第一级散列表保存了请求任务的任务优先级和对应的优先级子队列,其中第一级散列表的“key”为任务优先级,“value”为优先级子队列,因此可以通过查找第一级散列表获取请求任务应该添加的优先级子队列。比如:针对某个用户A产生了一个请求任务A,设置其任务优先级为“1”,任务名称为“A”。那么,根据任务优先级“1”从第一级散列表查找“key-value”键值对,可以确定对应的“第一级优先级子队列”。也就是说,请求任务“A”应该添加到阻塞队列的第一级优先级子队列中。
步骤502:根据所述添加任务优先级子队列的第二级散列表,判断是否已经存在与所述请求任务有相同任务名称的其他请求任务,如果存在,则执行步骤503;如果不存在,则执行步骤504。
在确定优先级子队列之后,由于同一个优先级子队列中可能包括若干不同的同类子队列,仍然无法准确定位。因此,步骤502~504需要再次查询第二级散列表。
步骤503:从所述添加任务优先级子队列的第二级散列表确定与所述任务名称对应的同类子队列,将确定的同类子队列作为添加任务同类子队列,并将所述请求任务添加到所述添加任务同类子队列中,所述第二级散列表用于保存所述任务名称和对应的同类子队列,并结束添加任务的流程。
如上所述,第二级散列表保存了任务名称和对应的同类子队列,其中第二级散列表的“key”为任务名称,“value”为同类子队列。如果查询到第二级散列表中已经存在相同任务名称的其他请求任务,说明此前阻塞队列中添加了对应的同类子队列。比如:上述的请求任务A,根据任务名称“A”从第二级散列表查找“key-value”键值对,可以确定对应的“a”。也就是说,请求任务“A”应该继续添加到同类子队列“a”中。按照上述举例,添加请求任务“A”之后的阻塞队列如图6所示的示例三,其中的虚结点是新添加的请求任务“A”。
如果第二级散列表中不存在相同任务名称的其他请求任务,则执行下述步骤504~506:
步骤504:从添加任务优先级子队列中确定一个队列单元作为添加任务队列单元。
步骤505:创建一个新的同类子队列,将所述请求任务添加到所述新的同类子队列中,并将所述新的同类子队列关联给所述添加任务队列单元。
步骤506:将请求任务的任务名称和新的同类子队列对应保存在任务优先级子队列的第二级散列表中。
为了后续继续添加相同任务名称的请求任务,本申请实施例将新添加的任务名称记录在第二级散列表中。假设需要添加用户F的请求任务,其优先级为“3”,任务名称为“F”,那么经过步骤501将其定位到第三级优先级子队列,经过步骤504~506,新创建一个同类子队列“f”,将请求任务“F”添加到该队列中,并将任务名称为“F”,同类子队列为“f”的这一对键值对添加到第三级优先级子队列的第二级散列表中。添加请求任务“F”之后的阻塞队列如图7的示例四所示,其中的虚结点是新添加的请求任务“F”。
应用本申请实施例方案,由于采用了两级散列表,可以快速定位到需要添加任务的同类子队列,以提高阻塞队列的工作效率。这里的图7仅是一种示例作用,实际应用中也可以将新创建的同类子队列关联到第三级优先级的其他队列单元上,并不受此限制。
建立阻塞队列之后,如果线程池的消费者线程空闲,阻塞队列就可以提取请求任务交给空闲的消费者线程执行。为了实现资源平衡的目的,本申请实施例可以事先设置资源平衡原则,按照该资源平衡原则轮流从阻塞队列中提取请求任务。
图8是本申请实施例中阻塞队列提取请求任务的方法流程图。如图8所示,该方法包括:
步骤801:获取被选择优先级和被选择优先级的当前队列单元。
为了轮流从各个同类子队列中提取请求任务,本申请实施例可以事先设置被选择优先级和被选择优先级的当前队列单元。其中,被选择优先级表示当前需要提取的请求任务所属的优先级,被选择优先级的当前队列单元表示当前需要提取的请求任务所关联的队列单元。比如:图9是提取请求任务之前的阻塞队列示例五,并假设在初始化时将被选择优先级设置为“1”,被选择优先级的当前队列单元设置为图9中箭头所指向的队列单元。由于轮流选择,每一个优先级队列都有自身的当前队列单元。
步骤802:根据被选择优先级在第一级散列表中获取对应的优先级子队列,将获取的优先级子队列作为提取任务优先级子队列。
步骤803:从提取任务优先级子队列中获取与该优先级子队列的当前队列单元关联的同类子队列,作为提取任务同类子队列。
上述步骤802和步骤803中的第一级散列表和被选择优先级子队列的当前队列单元可以确定提取任务同类子队列。假设被选择优先级为“1”,被选择优先级的当前队列单元为图9中第一优先级子队列中箭头所指向的队列单元。该队列单元关联的为同类子队列“a”,即当前应该从同类子队列“a”中提取任务请求。
步骤804:从提取任务同类子队列中获取请求任务;并将获取的请求任务从提取任务同类子队列中删除,将删除了所述获取的请求任务后的提取任务同类子队列重新关联给被选择优先级的下一个队列单元。
从同类子队列“a”中提取任务请求“A”之后,本申请实施例将已经提取的任务请求“A”从同类子队列“a”中删除,并将剩余的同类子队列重新关联给下一个队列单元。此操作之后的阻塞队列如图10的示例六所示。从图10可以看到,阻塞队列中已经提取出一个请求任务“A”,并将余下的同类子队列重新关联给了下一个队列单元。
步骤805:根据预设的资源平衡原则更新被选择优先级和被选择优先级的当前队列单元。
由于本申请实施例的阻塞队列在提取请求任务时,会根据被选择优先级和被选择优先级的当前队列单元定位应该提取的同类子队列,为了各个同类子队列中的请求任务都能够被轮流执行,因此本步骤需要更新被选择优先级和被选择优先级的当前队列单元,以便下一次提取请求任务。图11是本申请实施例根据预设的资源平衡原则更新被选择优先级和被选择优先级的当前队列单元的具体方法流程图。如图11所示,该方法包括:
步骤1101:判断所述被选择优先级的当前队列单元是否还存在关联的同类子队列,如果存在,执行步骤1102;如果不存在,则执行步骤1103。
步骤1102:保持所述被选择优先级和被选择优先级的当前队列单元,并退出。
步骤1103:将所述被选择优先级的遍历步长加1,所述被选择优先级的遍历步长表示遍历所述被选择优先级中队列单元的个数。
步骤1104:在所述被选择优先级的遍历步长到达预设的被选择优先级最大步长时,将所述被选择优先级的遍历步长重新初始化为0,将获取的下一个优先级设置为被选择优先级,并将所述下一个优先级的当前队列单元作为被选择优先级的当前队列单元。
也就是说,本申请实施例可以为各优先级子队列设置不同的步长,利用步长调节各优先级子队列中请求任务的执行机会,只有执行达到设置的步长时,才转换到下一个优先级子队列中提取请求任务。如图9所示,假设第一级优先级子队列的遍历步长为4,第二级优先级子队列的遍历步长为2,第三级优先级子队列的遍历步长为1。再假设初始的被选择优先级为“1”,被选择优先级的当前队列单元为箭头指向的队列单元。按照本实施例上述方式多次提取请求任务后,第一级优先级子队列中的请求任务轮询4次后,再对第二级优先级子队列中的请求任务轮询2次,最后对第三次优先级子队列中的请问任务轮询1,然后再重新对第一级优先级子队列中的请求任务进行轮询,并以此类推。这样,三种优先级中的请求任务占有消费者线程资源比例将会是4:2:1。不管各同类子队列中的请求任务产生的先后顺序,也不管某个用户是否产生大量的相同任务名称的请求任务,不同优先级的各类请求任务都可以及时得到处理。
步骤806:将从所述提取任务同类子队列中获取的请求任务提供给所述消费者线程。
应用本申请实施例方案,阻塞队列不但可以利用散列表、被选择优先级和被选择优先级的当前队列单元快速地提取请求任务,而且可以轮流提取各同类子队列中的请求任务,从而达到资源平衡的目的。
上述各实施例描述了本申请方案的方案,在实际应用中,上述的同类子队列可以利用链表实现,优先级子队列可以利用数组实现,连接各同类子队列头结点也可以利用链表实现。图12利用链表和数组实现的阻塞队列的示例七。如图12所示,阻塞队列包括:各个同类子队列1201、优先级子队列1202、第一级散列表1203、第二级散列表1204以及请求任务1205、同类子队列的头结点1206、头结点子队列1207。其中,每一个请求任务1205都是同类子队列1201中的一个元素,同类子队列1201采用链表实现;同类子队列的头结点1206用于指示对应的同类子队列,多个同类子队列的头结点可以采用链表组成头结点子队列1207;头结点子队列1207关联在优先级子队列1202的队列单元中,优先级子队列1202采用数组实现,数组的下标可以指示该优先级子队列的当前队列单元。
为了实现的方便,可以分别进行定义,用伪代码表示如下:
1、任务接口定义:
2、同类子队列的头结点定义:
3、优先级子队列的队列单元定义:
4、优先级子队列的定义:
5、阻塞队列的定义:
实际应用中,可以利用上述伪代码定义并利用上述实施例实现将请求任务添加到阻塞队列中,以及从阻塞队列中提取请求任务。
应用本申请实施例方案,由于保存请求任务的同类子队列是独立存在,可以按照预设的资源平衡原则从中获取请求任务提交给消费者线程执行,避免某用户独占资源的缺陷,达到各用户的请求任务能够及时得到响应的效果,消费者线程也因为执行不同用户的任务请求而避免阻塞,提高了应用系统的整体效率。另外,由于各同类子队列分别采用链表实现,优先级子队列采用数组实现,添加请求任务时利用两级散列快速表定位添加位置,阻塞队列的使用复杂度为O(1),提取请求任务时利用第一级散列表和数组下标表示的当前队列单元快速定位提取位置,阻塞队列的使用复杂度为O(k),k为优先级数量,因此,本申请实施例中的阻塞队列的工作效率比较高,可以达到快速定位的效果。
本申请还提供一种基于多线程的任务实现装置。图13是一种基于多线程的任务实现装置实施例一的结构示意图。如图13所示,该装置包括:任务生成模块1301、队列操作模块1302、任务消费模块1303。其中:
任务生成模块1301,用于由生产者线程根据用户业务生成请求任务并推送给线程池,所述请求任务包括任务优先级和任务名称。
队列操作模块1302,用于在所述线程池无空闲消费者线程时,根据任务优先级和任务名称从阻塞队列中确定一个同类子队列作为添加任务同类子队列,并将所述请求任务添加到所述添加任务同类子队列中;所述线程池有空闲消费者线程时,根据预设的资源平衡原则轮流从阻塞队列中确定一个同类子队列作为提取任务同类子队列,从所述提取任务同类子队列中确定待执行请求任务并提供给所述消费者线程。
任务消费模块1303,用于由所述消费者线程根据获取的所述待执行请求任务与业务数据库进行交互,以完成所述待执行请求任务的实现。
也就是说,任务生成模块1301中,生产者线程根据用户业务生成请求任务并推送给线程池,所述请求任务包括任务优先级和任务名称;在所述线程池无空闲消费者线程时,队列操作模块1302根据任务优先级和任务名称从阻塞队列中确定一个同类子队列作为添加任务同类子队列,并将所述请求任务添加到所述添加任务同类子队列中。此后,线程池有空闲消费者线程时,队列操作模块1302根据预设的资源平衡原则从阻塞队列中确定一个同类子队列作为提取任务同类子队列,从所述提取任务同类子队列中确定待执行请求任务并提供给所述消费者线程;任务消费模块1303中所述消费者线程根据获取的所述待执行请求任务与业务数据库进行交互,以完成所述待执行请求任务的实现。
图14是一种基于多线程的任务实现装置实施例二的结构示意图。如图14所示,该装置包括:任务生成模块1301、队列操作模块1302、任务消费模块1303。任务生成模块1301和任务消费模块1303与上述图13相同。队列操作模块1302包括添加任务模块1304和提取任务模块1305。其中:
添加任务模块1304,用于在所述线程池无空闲消费线程时,根据任务优先级和任务名称从阻塞队列中确定一个同类子队列作为添加任务同类子队列,并将所述请求任务添加到所述添加任务同类子队列中。
提取任务模块1305,用于在所述线程池有空闲消费者线程时,根据预设的资源平衡原则轮流从阻塞队列中确定一个同类子队列作为提取任务同类子队列,从所述提取任务同类子队列中确定待执行请求任务并提供给所述消费者线程。
优选地,添加任务模块1304包括添加任务优先级确定模块1306和相同任务判断模块1307。具体的:
添加任务优先级确定模块1306,用于根据所述请求任务的任务优先级从所述阻塞队列的第一级散列表中确定对应的优先级子队列,将对应的优先级子队列作为添加任务优先级子队列,所述第一级散列表用于保存所述任务优先级和对应的优先级子队列,所述优先级子队列中的队列单元用于关联所述同类子队列。
相同任务判断模块1307,用于根据所述添加任务优先级子队列判断是否已经存在与所述请求任务有相同任务名称的其他请求任务,如果存在,则从所述添加任务优先级子队列的第二级散列表确定与所述任务名称对应的同类子队列,将确定的同类子队列作为添加任务同类子队列,并将所述请求任务添加到所述添加任务同类子队列中,所述第二级散列表用于保存所述任务名称和对应的同类子队列;如果不存在,则从所述添加任务优先级子队列中确定一个队列单元作为添加任务队列单元;创建一个新的同类子队列,将所述请求任务添加到所述新的同类子队列中,并将所述新的同类子队列关联给所述添加任务队列单元;并将所述请求任务的任务名称和所述新的同类子队列对应保存在所述任务优先级子队列的第二级散列表中。
优选地,提取任务模块1305包括提取任务定位模块1308和提取任务操作模块1309。
提取任务定位模块1308,用于获取被选择优先级和被选择优先级的当前队列单元;根据所述被选择优先级在所述第一级散列表中获取对应的优先级子队列,将获取的优先级子队列作为提取任务优先级子队列;从所述提取任务优先级子队列中获取与所述当前队列单元关联的同类子队列,作为提取任务同类子队列;根据预设的资源平衡原则更新所述被选择优先级和被选择优先级的当前队列单元。
提取任务操作模块1309,用于从所述提取任务同类子队列中获取请求任务;并将所述获取的请求任务从所述提取任务同类子队列中删除,将删除了所述获取的请求任务后的所述提取任务同类子队列重新关联给被选择优先级的下一个提取任务队列单元;将从所述提取任务同类子队列中获取的请求任务提供给所述消费者线程。
优选地,任务生成模块1301中的生产者线程根据用户业务生成请求任务并推送给线程池;在线程池无空闲消费者线程时,添加任务优先级确定模块1306根据请求任务的任务优先级从阻塞队列的第一级散列表中确定对应的优先级子队列,将对应的优先级子队列作为添加任务优先级子队列。相同任务判断模块1307根据添加任务优先级子队列判断是否已经存在与请求任务有相同任务名称的其他请求任务,如果存在,则从添加任务优先级子队列的第二级散列表确定与所述任务名称对应的同类子队列,将确定的同类子队列作为添加任务同类子队列,并将所述请求任务添加到所述添加任务同类子队列中;如果不存在,则从添加任务优先级子队列中确定一个队列单元作为添加任务队列单元;创建一个新的同类子队列,将请求任务添加到所述新的同类子队列中,并将新的同类子队列关联给所述添加任务队列单元;并将请求任务的任务名称和新的同类子队列对应保存在所述任务优先级子队列的第二级散列表中。此后,如果有空闲的消费者线程,提取任务定位模块1308获取被选择优先级和被选择优先级的当前队列单元;根据被选择优先级在第一级散列表中获取对应的优先级子队列,将获取的优先级子队列作为提取任务优先级子队列;从提取任务优先级子队列中获取与当前队列单元关联的同类子队列,作为提取任务同类子队列;根据预设的资源平衡原则更新所述被选择优先级和被选择优先级的当前队列单元。提取任务操作模块1309从所述提取任务同类子队列中获取请求任务;并将获取的请求任务从提取任务同类子队列中删除,将删除了获取的请求任务后的提取任务同类子队列重新关联给被选择优先级的下一个提取任务队列单元;将从提取任务同类子队列中获取的请求任务提供给消费者线程。任务消费模块1303中消费者线程根据获取的待执行请求任务与业务数据库进行交互,以完成所述待执行请求任务的实现。
如图15所示,实际应用中,为了更为快速方便地进行定位,提取任务定位模块1308还包括第一定位模块1312和第二定位模块1310。具体的:
第一定位模块1312,用于获取被选择优先级和被选择优先级的当前队列单元;根据所述被选择优先级在所述第一级散列表中获取对应的优先级子队列,将获取的优先级子队列作为提取任务优先级子队列;从所述提取任务优先级子队列中获取与所述当前队列单元关联的同类子队列,作为提取任务同类子队列。
第二定位模块1310,用于根据预设的资源平衡原则更新所述被选择优先级和被选择优先级的当前队列单元。
优选地,第二定位模块1310包括关联判断模块1311。
关联判断模块1311,用于判断所述被选择优先级的当前队列单元是否还存在关联的同类子队列;如果存在,则保持所述被选择优先级和被选择优先级的当前队列单元;如果不存在,则将所述被选择优先级的遍历步长加1,所述被选择优先级的遍历步长表示遍历所述被选择优先级中队列单元的个数;在所述被选择优先级的遍历步长到达预设的被选择优先级最大步长时,将所述被选择优先级的遍历步长重新初始化为0,将获取的下一个优先级设置为被选择优先级,并将所述下一个优先级的当前队列单元作为被选择优先级的当前队列单元。
本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储指令,所述指令在由处理器执行时可执行如上所述的基于多线程的任务实现方法中的步骤。实际应用中,所述的计算机可读介质可以是上述实施例中描述的设备/装置/系统中所包含的,也可以是单独存在,而未装配入该设备/装置/系统中。根据本申请公开的实施例,计算机可读存储介质可以是非易失性的计算机可读存储介质,例如可以包括但不限于:便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件,或者上述的任意合适的组合,但不用于限制本申请保护的范围。在本申请公开的实施例中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
如图16所示,本发明实施例还提供一种基于多线程的任务实现的电子设备。如图16所示,其示出了本发明实施例所涉及的电子设备的结构示意图,具体来讲:
该电子设备可以包括一个或一个以上处理核心的处理器1601、一个或一个以上计算机可读存储介质的存储器1602以及存储在存储器上并可在处理器上运行的计算机程序。在执行所述存储器1602的程序时,可以实现上述基于多线程的任务的方法。
具体的,实际应用中,该电子设备还可以包括电源1603、输入输出单元1604等部件。本领域技术人员可以理解,图16中示出的电子设备的结构并不构成对该电子设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:
处理器1601是该电子设备的控制中心,利用各种接口和线路连接整个电子设备的各个部分,通过运行或执行存储在存储器1602内的软件程序和/或模块,以及调用存储在存储器1602内的数据,执行服务器的各种功能和处理数据,从而对该电子设备进行整体监控。
存储器1602可用于存储软件程序以及模块,即上述计算机可读存储介质。处理器1601通过运行存储在存储器1602的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器1602可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等;存储数据区可存储根据服务器的使用所创建的数据等。此外,存储器1602可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器1602还可以包括存储器控制器,以提供处理器1601对存储器1602的访问。
该电子设备还包括给各个部件供电的电源1603,可以通过电源管理系统与处理器1601逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源1603还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
该电子设备还可包括输入输出单元1604,该输入单元输出1604可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。该输入单元输出1604还可以用于显示由用户输入的信息或提供给用户的信息以及各种图像用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。
本申请附图中的流程图和框图,示出了按照本申请公开的各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或者代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应该注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同附图中所标准的顺序发生。例如,两个连接地表示的方框实际上可以基本并行地执行,它们有时也可以按照相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或者流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
本领域技术人员可以理解,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合,即使这样的组合或结合没有明确记载于本申请中。特别地,在不脱离本申请精神和教导的情况下,本申请的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合,所有这些组合和/或结合均落入本申请公开的范围。
本文中应用了具体实施例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思路,并不用于限制本申请。对于本领域的技术人员来说,可以依据本发明的思路、精神和原则,在具体实施方式及应用范围上进行改变,其所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。
Claims (10)
1.一种基于多线程的任务实现方法,其特征在于,该方法包括:
生产者线程根据用户业务生成请求任务并推送给线程池,所述请求任务包括任务优先级和任务名称;
所述线程池无空闲消费者线程时,根据任务优先级和任务名称从阻塞队列中确定一个同类子队列作为添加任务同类子队列,并将所述请求任务添加到所述添加任务同类子队列中;所述同类子队列用于保存相同优先级和任务名称的请求任务;
随后,所述线程池有空闲消费者线程时,根据预设的资源平衡原则轮流从阻塞队列中确定一个同类子队列作为提取任务同类子队列,从所述提取任务同类子队列中确定待执行请求任务并提供给所述消费者线程;
所述消费者线程根据获取的所述待执行请求任务与业务数据库进行交互,以完成所述待执行请求任务的实现。
2.根据权利要求1所述的方法,其特征在于,所述根据任务优先级和任务名称从阻塞队列中确定一个同类子队列作为添加任务同类子队列,并将所述请求任务添加到所述添加任务同类子队列中的步骤包括:
根据所述请求任务的任务优先级从所述阻塞队列的第一级散列表中确定对应的优先级子队列,将对应的优先级子队列作为添加任务优先级子队列,所述第一级散列表用于保存所述任务优先级和对应的优先级子队列,所述优先级子队列中的队列单元用于关联所述同类子队列;
根据所述添加任务优先级子队列判断是否已经存在与所述请求任务有相同任务名称的其他请求任务:
如果存在,则从所述添加任务优先级子队列的第二级散列表确定与所述任务名称对应的同类子队列,将确定的同类子队列作为添加任务同类子队列,并将所述请求任务添加到所述添加任务同类子队列中,所述第二级散列表用于保存所述任务名称和对应的同类子队列;
如果不存在,则从所述添加任务优先级子队列中确定一个队列单元作为添加任务队列单元;创建一个新的同类子队列,将所述请求任务添加到所述新的同类子队列中,并将所述新的同类子队列关联给所述添加任务队列单元;并将所述请求任务的任务名称和所述新的同类子队列对应保存在所述任务优先级子队列的第二级散列表中。
3.根据权利要求2所述的方法,其特征在于,所述根据预设的资源平衡原则轮流从阻塞队列中确定一个同类子队列作为提取任务同类子队列,从所述提取任务同类子队列中确定待执行请求任务并提供给所述消费者线程的步骤包括:
获取被选择优先级和被选择优先级的当前队列单元;
根据所述被选择优先级在所述第一级散列表中获取对应的优先级子队列,将获取的优先级子队列作为提取任务优先级子队列;
从所述提取任务优先级子队列中获取与所述当前队列单元关联的同类子队列,作为提取任务同类子队列;
从所述提取任务同类子队列中获取请求任务;并将所述获取的请求任务从所述提取任务同类子队列中删除,将删除了所述获取的请求任务后的所述提取任务同类子队列重新关联给被选择优先级的下一个队列单元;
根据预设的资源平衡原则更新所述被选择优先级和被选择优先级的当前队列单元;
将从所述提取任务同类子队列中获取的请求任务提供给所述消费者线程。
4.根据权利要求3所述的方法,其特征在于,所述根据预设的资源平衡原则更新所述被选择优先级和被选择优先级的当前队列单元的步骤包括:
判断所述被选择优先级的当前队列单元是否还存在关联的同类子队列;
如果存在,则保持所述被选择优先级和被选择优先级的当前队列单元;
如果不存在,则将所述被选择优先级的遍历步长加1,所述被选择优先级的遍历步长表示遍历所述被选择优先级中队列单元的个数;在所述被选择优先级的遍历步长到达预设的被选择优先级最大步长时,将所述被选择优先级的遍历步长重新初始化为0,将获取的下一个优先级设置为被选择优先级,并将所述下一个优先级的当前队列单元作为被选择优先级的当前队列单元。
5.一种基于多线程的任务实现装置,其特征在于,该装置包括:
任务生成模块,用于由生产者线程根据用户业务生成请求任务并推送给线程池,所述请求任务包括任务优先级和任务名称;
队列操作模块,用于在所述线程池无空闲消费者线程时,根据任务优先级和任务名称从阻塞队列中确定一个同类子队列作为添加任务同类子队列,并将所述请求任务添加到所述添加任务同类子队列中;所述线程池有空闲消费者线程时,根据预设的资源平衡原则轮流从阻塞队列中确定一个同类子队列作为提取任务同类子队列,从所述提取任务同类子队列中确定待执行请求任务并提供给所述消费者线程;
任务消费模块,用于由所述消费者线程根据获取的所述待执行请求任务与业务数据库进行交互,以完成所述待执行请求任务的实现。
6.根据权利要求5所述的装置,其特征在于,所述队列操作模块包括:
添加任务模块,用于在所述线程池无空闲消费者线程时,根据任务优先级和任务名称从阻塞队列中确定一个同类子队列作为添加任务同类子队列,并将所述请求任务添加到所述添加任务同类子队列中;
提取任务模块,用于在所述线程池有空闲消费者线程时,根据预设的资源平衡原则轮流从阻塞队列中确定一个同类子队列作为提取任务同类子队列,从所述提取任务同类子队列中确定待执行请求任务并提供给所述消费者线程。
7.根据权利要求6所述的装置,其特征在于,所述添加任务模块包括:
添加任务优先级确定模块,用于根据所述请求任务的任务优先级从所述阻塞队列的第一级散列表中确定对应的优先级子队列,将对应的优先级子队列作为添加任务优先级子队列,所述第一级散列表用于保存所述任务优先级和对应的优先级子队列,所述优先级子队列中的队列单元用于关联所述同类子队列;
相同任务判断模块,用于根据所述添加任务优先级子队列判断是否已经存在与所述请求任务有相同任务名称的其他请求任务,如果存在,则从所述添加任务优先级子队列的第二级散列表确定与所述任务名称对应的同类子队列,将确定的同类子队列作为添加任务同类子队列,并将所述请求任务添加到所述添加任务同类子队列中,所述第二级散列表用于保存所述任务名称和对应的同类子队列;如果不存在,则从所述添加任务优先级子队列中确定一个队列单元作为添加任务队列单元;创建一个新的同类子队列,将所述请求任务添加到所述新的同类子队列中,并将所述新的同类子队列关联给所述添加任务队列单元;并将所述请求任务的任务名称和所述新的同类子队列对应保存在所述任务优先级子队列的第二级散列表中。
8.根据权利要求7所述的装置,其特征在于,所述提取任务模块包括:
提取任务定位模块,用于获取被选择优先级和被选择优先级的当前队列单元;根据所述被选择优先级在所述第一级散列表中获取对应的优先级子队列,将获取的优先级子队列作为提取任务优先级子队列;从所述提取任务优先级子队列中获取与所述当前队列单元关联的同类子队列,作为提取任务同类子队列;根据预设的资源平衡原则更新所述被选择优先级和被选择优先级的当前队列单元;
提取任务操作模块,用于从所述提取任务同类子队列中获取请求任务;并将所述获取的请求任务从所述提取任务同类子队列中删除,将删除了所述获取的请求任务后的所述提取任务同类子队列重新关联给被选择优先级的下一个提取任务队列单元;将从所述提取任务同类子队列中获取的请求任务提供给所述消费者线程。
9.一种计算机可读存储介质,其上存储有计算机指令,其特征在于,所述指令被处理器执行时可实现权利要求1~4任一项所述的基于多线程的任务实现方法中的步骤。
10.一种基于多线程的任务实现的电子设备,其特征在于,该电子设备包括:
处理器;
用于存储所述处理器可执行指令的存储器;
所述处理器,用于从所述存储器中读取所述可执行指令,并执行所述指令以实现上述权利要求1~4任一项所述的基于多线程的任务实现方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010304099.XA CN111552546B (zh) | 2020-04-16 | 2020-04-16 | 一种基于多线程的任务实现方法、装置及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010304099.XA CN111552546B (zh) | 2020-04-16 | 2020-04-16 | 一种基于多线程的任务实现方法、装置及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111552546A true CN111552546A (zh) | 2020-08-18 |
CN111552546B CN111552546B (zh) | 2021-07-16 |
Family
ID=72000064
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010304099.XA Active CN111552546B (zh) | 2020-04-16 | 2020-04-16 | 一种基于多线程的任务实现方法、装置及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111552546B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023025269A1 (zh) * | 2021-08-27 | 2023-03-02 | 深圳市纵维立方科技有限公司 | 切片处理方法、打印方法、系统、设备和存储介质 |
CN116414874A (zh) * | 2023-06-07 | 2023-07-11 | 益普索(中国)咨询有限公司 | 一种招投标信息管理系统和方法 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103473138A (zh) * | 2013-09-18 | 2013-12-25 | 柳州市博源环科科技有限公司 | 基于线程池的多任务队列调度方法 |
CN105204933A (zh) * | 2015-09-18 | 2015-12-30 | 上海斐讯数据通信技术有限公司 | 基于单进程的多任务切换执行方法、系统及处理器 |
CN105760234A (zh) * | 2016-03-17 | 2016-07-13 | 联动优势科技有限公司 | 一种线程池管理方法及装置 |
CN106802826A (zh) * | 2016-12-23 | 2017-06-06 | 中国银联股份有限公司 | 一种基于线程池的业务处理方法及装置 |
US20190065336A1 (en) * | 2017-08-24 | 2019-02-28 | Tata Consultancy Services Limited | System and method for predicting application performance for large data size on big data cluster |
CN109582455A (zh) * | 2018-12-03 | 2019-04-05 | 恒生电子股份有限公司 | 多线程任务处理方法、装置及存储介质 |
CN110046038A (zh) * | 2019-03-12 | 2019-07-23 | 平安普惠企业管理有限公司 | 一种基于线程池的任务处理方法及装置 |
CN110737534A (zh) * | 2019-10-29 | 2020-01-31 | 京东数字科技控股有限公司 | 任务的处理方法、装置和服务器 |
-
2020
- 2020-04-16 CN CN202010304099.XA patent/CN111552546B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103473138A (zh) * | 2013-09-18 | 2013-12-25 | 柳州市博源环科科技有限公司 | 基于线程池的多任务队列调度方法 |
CN105204933A (zh) * | 2015-09-18 | 2015-12-30 | 上海斐讯数据通信技术有限公司 | 基于单进程的多任务切换执行方法、系统及处理器 |
CN105760234A (zh) * | 2016-03-17 | 2016-07-13 | 联动优势科技有限公司 | 一种线程池管理方法及装置 |
CN106802826A (zh) * | 2016-12-23 | 2017-06-06 | 中国银联股份有限公司 | 一种基于线程池的业务处理方法及装置 |
US20190065336A1 (en) * | 2017-08-24 | 2019-02-28 | Tata Consultancy Services Limited | System and method for predicting application performance for large data size on big data cluster |
CN109582455A (zh) * | 2018-12-03 | 2019-04-05 | 恒生电子股份有限公司 | 多线程任务处理方法、装置及存储介质 |
CN110046038A (zh) * | 2019-03-12 | 2019-07-23 | 平安普惠企业管理有限公司 | 一种基于线程池的任务处理方法及装置 |
CN110737534A (zh) * | 2019-10-29 | 2020-01-31 | 京东数字科技控股有限公司 | 任务的处理方法、装置和服务器 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023025269A1 (zh) * | 2021-08-27 | 2023-03-02 | 深圳市纵维立方科技有限公司 | 切片处理方法、打印方法、系统、设备和存储介质 |
CN116414874A (zh) * | 2023-06-07 | 2023-07-11 | 益普索(中国)咨询有限公司 | 一种招投标信息管理系统和方法 |
CN116414874B (zh) * | 2023-06-07 | 2023-10-03 | 益普索(中国)咨询有限公司 | 一种招投标信息管理系统和方法 |
Also Published As
Publication number | Publication date |
---|---|
CN111552546B (zh) | 2021-07-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11269834B2 (en) | Detecting quasi-identifiers in datasets | |
US8776066B2 (en) | Managing task execution on accelerators | |
US8056080B2 (en) | Multi-core/thread work-group computation scheduler | |
US7996570B1 (en) | Usage of keyboard driver in extensible firmware interface for adding new hot keys at firmware level | |
CN111552546B (zh) | 一种基于多线程的任务实现方法、装置及存储介质 | |
TWI746511B (zh) | 資料表連接方法及裝置 | |
CN112148779B (zh) | 确定业务指标的方法、装置及存储介质 | |
CN111488492B (zh) | 用于检索图数据库的方法和装置 | |
CN110990396B (zh) | 数据存储方法、装置及存储介质 | |
CN110737680A (zh) | 缓存数据管理方法、装置、存储介质及电子设备 | |
US8626799B2 (en) | Mapping data structures | |
JP7174377B2 (ja) | データベース管理システム、および、匿名加工処理方法 | |
CN111694843A (zh) | 缺失号码检测方法、装置、电子设备及存储介质 | |
US10956125B2 (en) | Data shuffling with hierarchical tuple spaces | |
JP2020021417A (ja) | データベース管理システム及び方法 | |
US8332595B2 (en) | Techniques for improving parallel scan operations | |
CN110704226B (zh) | 数据校验方法、装置及存储介质 | |
CN112258244A (zh) | 确定目标物品所属任务的方法、装置、设备及存储介质 | |
US10768902B2 (en) | Actor model programming | |
CN116167882A (zh) | 条件表达式动态配置方法、会计条件计算方法及装置 | |
Lin et al. | Impact of MapReduce policies on job completion reliability and job energy consumption | |
US10891274B2 (en) | Data shuffling with hierarchical tuple spaces | |
US20140215473A1 (en) | Objectives of operations executing across environments | |
CN109815295A (zh) | 分布式集群数据导入方法及装置 | |
CN108595552A (zh) | 数据立方体发布方法、装置、电子设备和存储介质 |
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 | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20201027 Address after: 100085 Floor 102-1, Building No. 35, West Second Banner Road, Haidian District, Beijing Applicant after: Seashell Housing (Beijing) Technology Co.,Ltd. Address before: 300 280 Tianjin Economic and Technological Development Zone Nangang Industrial Zone Office Building C Block 1, Room 112, Unit 05 Applicant before: BEIKE TECHNOLOGY Co.,Ltd. |
|
TA01 | Transfer of patent application right | ||
GR01 | Patent grant | ||
GR01 | Patent grant |