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

一种基于多级队列的任务处理方法及系统

2022-08-10 15:53:12 来源:中国专利 TAG:


1.本发明涉及一种基于多级队列的任务处理方法及系统,属于任务调度和数据处理技术领域。


背景技术:

2.在传统的线程调度方法中,有fcfs调度算法,短作业优先调度算法,高优先级调度算法,时间片轮转调度算法等;这些算法在理论上可行性较强,但是由于线程数量的不确定性,任务有优先级的复杂性,往往不能够较好的处理现实情况;而传统的多级反馈队列调度算法虽然较好的考虑了线程优先级的情况,但是时间片分配过于细碎,导致任务切换频繁,在实际使用中并不是特别理想。


技术实现要素:

3.本发明的目的在于提供一种基于多级队列的任务处理方法及系统,解决现有技术中由于时间片用完导致的线程切换的问题、分组的开销和过多分组导致的切换频繁问题。
4.为实现以上目的,本发明是采用下述技术方案实现的:
5.第一方面,本发明提供了一种基于多级队列的任务处理方法,包括:
6.获取一个时间周期内的线程并进行映射,得到线程的初始优先级和数据量;
7.将数据量小于预设数据量阈值的线程划分至一个单级队列,将数据量大于预设数据量阈值的线程按照其初始优先级划分至多级队列中排序好的各队列;
8.在多级队列中的队列中将线程按照其数据量和初始优先级进行排序;
9.先处理单级队列中线程的任务,再按照多级队列中的队列排序进行队列中线程的任务处理,完成任务处理,在多级队列中的队列中按照所述线程的排序进行处理。
10.结合第一方面,进一步的,所述线程通过以下方法得到:
11.抓取一个时间周期内连接至服务器的所有线程和等待队列中的所有线程,得到待处理的所有线程。
12.结合第一方面,进一步的,对线程进行映射,包括:
13.初始化一个hashmap对线程进行映射,得到线程的队列号、初始优先级和数据量。
14.结合第一方面,进一步的,所述数据量阈值通过以下方法计算得到:
15.hold=len/(2n)
16.其中,hold为数据量阈值,len为所有线程的数据量的总和,n为线程的数量。
17.结合第一方面,进一步的,在多级队列中的队列中将线程按照其数据量和初始优先级进行排序,包括:
18.通过公式xi=di*pi计算各线程的优先量,其中,xi为线程i的优先量,di为线程i的数据量,pi为线程i的初始优先级;
19.按照优先量从小到大的顺序将线程在多级队列中的队列中排序;
20.对排序完成后的线程进行队列号的更新。
21.结合第一方面,进一步的,处理单级队列中线程的任务,包括使用shirt job first算法对单级队列中的任务进行处理,所述shirt job first算法的规则为优先处理数据量小的任务。
22.结合第一方面,进一步的,还包括设定一个单级队列和包含√n个队列的多级队列的步骤,其中,n是线程的数量。
23.结合第一方面,进一步的,还包括设定一个待处理队列的步骤,以及将一个时间周期内任务未处理完的线程放入所述待处理队列的步骤。
24.第二方面,本发明还提供了一种基于多级队列的任务处理系统,包括:
25.获取模块:用于获取一个时间周期内的线程并进行映射,得到线程的初始优先级和数据量;
26.划分模块:用于将数据量小于预设数据量阈值的线程划分至一个单级队列,将数据量大于预设数据量阈值的线程按照其初始优先级划分至多级队列中排序好的各队列;
27.排序模块:用于在多级队列中的队列中将线程按照其数据量和初始优先级进行排序;
28.处理模块:用于先处理单级队列中线程的任务,再按照多级队列中的队列排序进行队列中线程的任务处理,完成任务处理,在多级队列中的队列中按照所述线程的排序进行处理。
29.与现有技术相比,本发明所达到的有益效果是:
30.本发明提供的一种基于多级队列的任务处理方法及系统,通过对线程进行映射,得到线程的初始优先级和数据量,在每一轮的线程中任务处理中能够快速定位到所在线程,加快了任务的处理速度;运用多级队列不过于细致化分组,减轻了分组的开销和过多分组导致的切换频繁问题,进一步提升任务的处理速度;在多级队列中不使用基于时间片的轮转算法,针对线程的数据量和初始优先级进行处理顺序的排序,减少了由于时间片用完导致的线程切换的问题,在多级队列中加快了数据量小、初始优先级短的任务的处理速度;综上所述,本发明方案减少由于时间片用完导致的线程切换的问题,减轻了分组的开销和过多分组导致的切换频繁问题,显著加快了任务的处理速度。
附图说明
31.图1是本发明实施例提供的一种基于多级队列的任务处理方法的流程图。
具体实施方式
32.下面结合附图对本发明作进一步描述,以下实施例仅用于更加清楚地说明本发明的技术方案,而不能以此来限制本发明的保护范围。
33.实施例1
34.如图1所示,本发明实施例提供了一种基于多级队列的任务处理方法,包括:
35.s1、获取一个时间周期内的线程并进行映射,得到线程的初始优先级和数据量。
36.对于连接到服务器的线程,对一个时间周期(自设定时间)内的所有线程进行抓取,数量为x(一个时间周期内的线程数量);在这些线程的数据协议中,包含该线程的初始优先级以及数据量,再将等待队列中的线程也加入线程池,数量为y(等待队列中的线程数,
为上一时间周期内未处理完的线程)。
37.线程总数量的计算公式为n=x y(n为总的线程数量)。
38.初始化一个hashmap,hashmap是一种能够根据关键字key获取数值value的数据结构),用于映射线程。
39.hashmap的key(关键字)为线程的tid(tid为线程的标识,在操作系统中每一个线程都会有一个tid,用于标识自身,操作系统自带),value(数值)为一个数组arr(自定义数组名称为arr,为一个整型数组),其大小为3,arr[0]为队列号,arr[1]为初始优先级,arr[2]为数据量。
[0040]
从等待队列中获得的线程的arr[0]默认设定为0,抓取到的线程队列的arr[0]初值设定为-1。
[0041]
抓取线程通过hashmap记录,可以快速的定位该线程的初始优先级、数据量,具体过程如下:
[0042]
创建hashmap《integer,integer[]》threadmap=new hashmap《》();
[0043]
每抓取一个线程,设其tid、所在队列号、初始优先级、数据量为(t1、l1、p1、d1),那么该线程在hashmap中的存放为record.put(t1,new arr{l1,p1,d1});
[0044]
随后放入后续的线程,直至放入第n个线程record.put(tn,new arr{ln,pn,dn})。
[0045]
s2、将数据量小于预设数据量阈值的线程划分至一个单级队列,将数据量大于预设数据量阈值的线程按照其初始优先级划分至多级队列中排序好的各队列。
[0046]
遍历hashmap,计算出被hashmap记录的所有线程的数据量的总长度:
[0047]
设n个线程的数据量大小分别是(l1,l2,l3,

,ln),则其总长度为len=l1 l2 l3

ln。
[0048]
然后计算出数据量阈值:
[0049]
hold=len/(2n)
[0050]
其中,hold为数据量阈值,len为所有线程的数据量的总和,n为线程的数量。
[0051]
设定一个包含个队列的多级队列、一个单级队列和一个待处理队列。
[0052]
将数据量小于预设数据量阈值的线程划分至一个单级队列(即短作业优先队列),使用shirt job first算法对单级队列中的任务进行处理,所述shirt job first算法的规则为优先处理数据量小的任务。
[0053]
将数据量大于预设数据量阈值的线程按照其初始优先级划分至多级队列中排序好的各队列中,多级队列中队列的数量为个:
[0054]
将初始优先级为p1至的线程分至第一个队列;
[0055]
将初始优先级为至的线程分至第二个队列;
[0056]
……
[0057]
将初始优先级为p1至的线程分至第一个队列。
[0058]
s3、在多级队列中的队列中将线程按照其数据量和初始优先级进行排序。
[0059]
对于在同一队列中的线程,设其优先量为x,其计算公式为:
[0060]
xi=di*pi
[0061]
其中,xi为线程i的优先量,di为线程i的数据量,pi为线程i的初始优先级。
[0062]
按照优先量从小到大的顺序将线程在多级队列中的队列中排序,并对排序完成后的线程进行队列号的更新。
[0063]
所以队列总是优先处理数据量小且初始优先级更优先的任务。
[0064]
s4、先处理单级队列中线程的任务,再按照多级队列中的队列排序进行队列中线程的任务处理,完成任务处理,在多级队列中的队列中按照所述线程的排序进行处理。
[0065]
处理单级队列中线程的任务,包括使用shirt job first算法对单级队列中的任务进行处理,所述shirt job first算法的规则为优先处理数据量小的任务。
[0066]
按照所述线程的排序在多级队列中的各队列中进行任务的处理。
[0067]
设定整个多级队列的总处理时间为m(自定义变量),第一个队列处理完成,如果总时间未到m,可以处理第二个队列,依次类推;如果第一个队列处理完成时时间到达m,将剩下的线程放入待处理队列,在下一个时间周期开始时作为等待队列处理。
[0068]
实施例2
[0069]
本发明实施例提供了一种基于多级队列的任务处理系统,包括:
[0070]
获取模块:用于获取一个时间周期内的线程并进行映射,得到线程的初始优先级和数据量;
[0071]
划分模块:用于将数据量小于预设数据量阈值的线程划分至一个单级队列,将数据量大于预设数据量阈值的线程按照其初始优先级划分至多级队列中排序好的各队列;
[0072]
排序模块:用于在多级队列中的队列中将线程按照其数据量和初始优先级进行排序;
[0073]
处理模块:用于先处理单级队列中线程的任务,再按照多级队列中的队列排序进行队列中线程的任务处理,完成任务处理,在多级队列中的队列中按照所述线程的排序进行处理。
[0074]
本领域内的技术人员应明白,本技术的实施例可提供为方法、系统、或计算机程序产品。因此,本技术可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本技术可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
[0075]
本技术是参照根据本技术实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0076]
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0077]
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计
算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0078]
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。
再多了解一些

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

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

相关文献