附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本申请的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了DPDK中的ring所实现的任务队列的示例;
图2示出了根据本申请一个实施方式的任务队列的处理方法的流程图;
图3示出了根据本申请另一实施方式的任务队列的处理方法的流程图;
图4示出了根据本申请一个实施方式根据任务状态位图中的记录确认任务队列中的任务的状态的流程图;
图5示出了根据本申请一个实施方式在任务状态位图中记录生产方向任务队列添加任务的操作的流程图;
图6示出了根据本申请一个实施方式在任务状态位图中记录处理方从任务队列取出任务的操作的流程图;
图7示出了根据本申请一个实施方式在任务状态位图中记录处理方完成对任务的处理的操作的流程图;
图8示出了根据本申请一个实施例的任务状态位图的示意图;
图9示出了根据本申请一个实施方式的任务队列的处理装置的示意图;
图10示出了根据本申请另一实施方式的任务队列的处理装置的示意图;
图11示出了根据本申请一个实施方式的状态确认单元的示意图;
图12示出了根据本申请一个实施方式的位图记录单元的示意图。
具体实施方式
以下参照附图对本申请的实施方式进行详细描述。应注意,以下描述仅仅是示例性的,而并不旨在限制本申请。此外,在以下描述中,将采用相同的附图标号表示不同附图中的相同或相似的部件。在以下描述的不同实施方式中的不同特征,可彼此结合,以形成本申请范围内的其他实施方式。
图2示出了根据本申请一个实施方式的任务队列的处理方法的流程图。如图2所示,该方法100可包括步骤S110至S130。在步骤S110中,任务的生产方向任务队列中添加任务,并且在任务状态位图中记录生产方向任务队列添加任务的操作。如上所述,在计算机系统中完成一个功能需要处理若干个任务,系统中的上游线程或进程在需要的时候会向任务队列中添加任务,下游线程或进程会不断从任务队列中获取任务进行处理。任务可以是例如输入/输出、网络请求等。根据本实施方式,在任务的生产方向任务队列中添加任务时,也就是在任务入队时,在任务状态位图中记录下该操作。任务状态位图(bitmap)是包含若干个位(bit)的数据集合,其中的每个位可具有0和1两个数值,即两种状态。可通过改变任务状态位图中的位的数值来记录操作,例如将某位从0变为1或从1变为0。
在步骤S120中,任务的处理方从任务队列取出任务进行处理,并且在任务状态位图中记录处理方从任务队列取出任务的操作。由此,在任务的处理方从任务队列取出任务进行处理时,也就是在任务出队时,可在任务状态位图中记录下该操作。随后,在步骤S130中,任务的处理方完成对任务的处理,并且在任务状态位图中记录处理方完成对任务的处理的操作。由此,在任务的处理方完成对任务的处理时,也就是在任务完成时,可在任务状态位图中记录下该操作。如上所述,可通过改变任务状态位图中的位的数值来记录诸如添加任务的操作、取出任务的操作和完成任务的操作,例如将某位从0变为1或从1变为0。
由此,通过设置任务状态位图来记录任务队列中的任务的入队、出队和完成操作,从而无论在任何时刻,均可通过查询该任务状态位图来获知任务队列中所有任务的当前状态,并且即便对于复杂度较高的系统,也可以很方便地通过任务状态位图来完整地记录任务队列中所有任务的状态,从而可以很好地支持线程或进程的热升级需求。而且,任务的生产方和处理方不需要彼此进行通信,就可以通过任务状态位图来获知任务的状态。因此,生产方和处理方基本不需要引入其他逻辑就可以进行热升级。
图3示出了根据本申请另一实施方式的任务队列的处理方法的流程图。如图3所示,除了步骤S110至S130之外,该方法100还可包括步骤S140。为了简要起见,以下将仅描述图3所示的实施方式与图2的不同之处,并将略去其相同之处的详细描述。
在步骤S140中,根据任务状态位图中的记录,确认任务队列中的任务的状态。当系统需要获知任务队列中任意任务的当前状态时,可方便地通过查询任务状态位图中的记录来获知。任务状态位图中包含多个位,对于任务队列中的任一任务而言,通过任务状态位图中与其对应的多个位的数值(0或1)的组合,即可判断出该任务处于什么状态。
图4示出了根据本申请一个实施方式根据任务状态位图中的记录确认任务队列中的任务的状态的流程图。如图4所示,上述步骤S140可包括子步骤S141和S142。在子步骤S141中,对任务状态位图中与任务队列中的任务相对应的多个位做异或运算。在任务状态位图中,可有多个位与一个任务相对应。例如,任务状态位图中的一个位可对应于该任务的入队操作,另一个位可对应于该任务的出队操作,还有一个位可对应于该任务的完成操作。在初始时,即该任务还未添加到任务队列中时,可将任务状态位图中的三个位分配给该任务,三个位上的数值可均预设为0(或者也可均为1)。当任务添加到任务队列中时,可将与该任务的入队操作相对应的位修改为1,与该任务的其他两个位的数值还保持为0。当任务被从任务队列中取出进行处理时,可将与该任务的出队操作相对应的位修改为1,此时与该任务的入队操作相对应的位的数值也已是1,但与该任务的完成操作相对应的位的数值仍为0。当任务完成时,可将与该任务的完成操作相对应的位修改为1,此时与该任务对应的三个三个位上的数值均为1。也就是说,在任务状态位图中与该任务对应的三个位上的数值经历了000→100→110→111的变化。
随后,在子步骤S142中,根据异或运算的结果,确认任务队列中的任务的状态。如上例中所述,在任务状态位图中与该任务对应的三个位上的数值经历了000→100→110→111的变化,因此可通过异或运算的结果来判断该任务当前正处于哪个状态。例如,当异或运算的结果显示三个位的数值均相同,则表示该任务不在队列中(还未添加入队列或已处理完成);如果前两个位的数值不同,则说明该任务已添加到任务队列中,但还未进行处理;如果后两个位的数值不同,则说明该任务已被取出进行处理,但还未处理完成。
由此,可在任意时刻通过查询任务状态位图,方便地获知任务队列中的任务的当前状态。在任务状态位图中由多个位记录任务队列中一个任务的状态,这些位可完整地记录该任务在任务队列中整个生命周期过程中的所有状态。并且,由于异或操作的原子性,可确保任务队列状态的一致性,整个过程中任务队列中的任一任务只会是已入队待处理、处理中、处理完成三种状态,而不会出现其他中间状态,大大简化了热升级过程中的状态维护。
图5示出了根据本申请一个实施方式在任务状态位图中记录生产方向任务队列添加任务的操作的流程图。如图5所示,上述步骤S110可包括子步骤S111和S112。在子步骤S111中,响应于生产方向任务队列添加任务的操作,在任务状态位图中确定与所添加的任务的添加操作相对应的位。当任务的生产方(例如,系统中的线程或进程)向任务队列中添加任务时,可在任务状态位图中分配并确定与针对该任务的该操作相对应的位。随后,在子步骤S112中,修改任务状态位图中与所添加的任务的添加操作相对应的位的数值。即,如果该位上先前的数值为0,则修改为1;反之,如果先前为1,则修改为0。由此,可通过修改相应位上的数值来记录任务队列中任务的操作,从而实现对任务状态的记录。
图6示出了根据本申请一个实施方式在任务状态位图中记录处理方从任务队列取出任务的操作的流程图。如图6所示,上述步骤S120可包括子步骤S121和S122。在子步骤S121中,响应于任务的处理方从任务队列取出任务的操作,在任务状态位图中确定与所取出的任务的取出操作相对应的位。当任务的处理方(例如,系统中的线程或进程)从任务队列取出任务进行处理时,可在任务状态位图中分配并确定与针对该任务的该操作相对应的位。随后,在子步骤S122中,修改任务状态位图中与所取出的任务的取出操作相对应的位的数值。即,如果该位上先前的数值为0,则修改为1;反之,如果先前为1,则修改为0。由此,可通过修改相应位上的数值来记录任务队列中任务的操作,从而实现对任务状态的记录。
图7示出了根据本申请一个实施方式在任务状态位图中记录处理方完成对任务的处理的操作的流程图。如图7所示,上述步骤S130可包括子步骤S131和S132。在子步骤S131中,响应于任务的处理方完成对任务的处理的操作,在任务状态位图中确定与所完成的任务的完成操作相对应的位。当任务的处理方(例如,系统中的线程或进程)完成对任务的处理时,可在任务状态位图中分配并确定与针对该任务的该操作相对应的位。随后,在子步骤S132中,修改任务状态位图中与所完成的任务的完成操作相对应的位的数值。即,如果该位上先前的数值为0,则修改为1;反之,如果先前为1,则修改为0。由此,可通过修改相应位上的数值来记录任务队列中任务的操作,从而实现对任务状态的记录。
图8示出了根据本申请一个实施例的任务状态位图的示意图。如图8所示,该任务状态位图中的第一行Index表示任务队列中的任务编号,即任务队列中的第0个任务、第1个任务、第2个任务、第3个任务等等。第二行EnQueueBM是与每个任务的入队操作对应的位。第三行DeQueueBM是与每个任务的出队操作对应的位。第四行DoneBM是与每个任务的完成操作对应的位。第五行TaskState是通过异或运算后得出的每个任务的状态。也就是说,对于任务队列中的每个任务,在任务状态位图中均有三个位与之相对应,其中一个位记录任务的入队操作,另一个位记录任务的出队操作,还有一个位记录任务的完成操作。在初始时,任务状态位图中未被任何任务占用的一列三个位上的数值需保持一致,可以都是0,也可以都是1。可以理解,任务状态位图中的一列三个位经历了一个任务的完整处理过程后,其数值将均由0变为1,或者均由1变为0。
可通过对一个任务的三个位进行异或运算来获知该任务的当前状态。在图8所示的任务状态位图中,第二列任务0对应的三个位上的数值均为0,第五列任务3对应的三个位上的数值均为1。因为对于任务0和任务3中的任一个任务而言,其EnQueueBM位、DeQueueBM位、DoneBM位上的数值均相等,因此可以获知,该两列的位当前未被任何任务占用。可能是从未有任务占用过该列(即,初始化的状态),也可能是上一个占用该列的任务已完成。因此,状态显示为Done。
在图8所示的任务状态位图的第三列任务1中,EnQueueBM位为0,DeQueueBM位和DoneBM位均为1。因此,EnQueueBM位与DeQueueBM位的异或结果为1,这说明与该列对应的任务已添加到任务队列中,但还未由处理方取出进行处理。因此,状态显示为Queuing,即添加入任务队列中,待处理。
在图8所示的任务状态位图的第四列任务2中,EnQueueBM位和DeQueueBM位均为1,DoneBM位为0。因此,DeQueueBM位与DoneBM位的异或结果为1,这说明与该列对应的任务已由任务的处理方从任务队列中取出进行处理,但还未处理完成。因此,状态显示为Processing,即处理中。
由以上描述可以看出,通过任务状态位图,可以很方便地获知任务队列中的每个任务的当前状态。这样有助于系统中组件的热升级,而不会影响其上下游组件。并且,任务的生产方和处理方也不需要通过通信才能够获知任务的当前状态。
图9示出了根据本申请一个实施方式的任务队列的处理装置的示意图。如图9所示,该装置200可包括任务生产单元210、任务处理单元220、位图记录单元230。任务生产单元210用于向任务队列中添加任务。任务处理单元220用于从所述任务队列取出并处理任务。位图记录单元230用于在任务状态位图中记录向所述任务队列添加任务的操作、从所述任务队列取出任务的操作以及完成对任务的处理的操作。
图10示出了根据本申请另一实施方式的任务队列的处理装置的示意图。如图10所示,除了任务生产单元210、任务处理单元220、位图记录单元230之外,该装置200还可包括状态确认单元240。状态确认单元240根据所述任务状态位图中的记录,确认所述任务队列中的任务的状态。
图11示出了根据本申请一个实施方式的状态确认单元的示意图。如图11所示,状态确认单元240可包括运算子单元241和确认子单元242。运算子单元241对所述任务状态位图中与所述任务队列中的任务相对应的多个位做异或运算。确认子单元242根据所述异或运算的结果,确认所述任务队列中的任务的状态。
图12示出了根据本申请一个实施方式的位图记录单元的示意图。如图12所示,位图记录单元230可包括确定子单元231和修改子单元232。确定子单元231响应于向所述任务队列添加任务的操作,在所述任务状态位图中确定与所添加的任务的添加操作相对应的位。修改子单元232修改所述任务状态位图中与所添加的任务的添加操作相对应的位的数值。
根据本申请另一实施方式,确定子单元231响应于从所述任务队列取出任务的操作,在所述任务状态位图中确定与所取出的任务的取出操作相对应的位。修改子单元232修改所述任务状态位图中与所取出的任务的取出操作相对应的位的数值。
根据本申请另一实施方式,确定子单元231响应于完成对任务的处理的操作,在所述任务状态位图中确定与所完成的任务的完成操作相对应的位。修改子单元232修改所述任务状态位图中与所完成的任务的完成操作相对应的位的数值。
根据本申请的另一方面,提供了一种装置,其包括处理器和存储器,存储器,用于存储一个或多个程序,当该一个或多个程序被该处理器执行时,可使得该处理器实现如上所述的方法。
根据本申请的又一方面,提供了一种非瞬时性计算机可读存储介质,其上存储有计算机程序,该计算机程序在被处理器执行时,可使得该处理器实现如上所述的方法。
本领域技术人员可以理解,本申请的技术方案可实施为系统、方法或计算机程序产品。因此,本申请可表现为完全硬件的实施例、完全软件的实施例(包括固件、常驻软件、微码等)或将软件和硬件相结合的实施例的形式,它们一般可被称为“电路”、“模块”或“系统”。此外,本申请可表现为计算机程序产品的形式,所述计算机程序产品嵌入到任何有形的表达介质中,所述有形的表达介质具有嵌入到所述介质中的计算机可用程序代码。
参照根据本申请实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图来描述本申请。可以理解的是,可由计算机程序指令执行流程图和/或框图中的每个框、以及流程图和/或框图中的多个框的组合。这些计算机程序指令可提供给通用目的计算机、专用目的计算机或其它可编程数据处理装置的处理器,以使通过计算机或其它可编程数据处理装置的处理器执行的指令创建用于实现流程图和/或框图的一个框或多个框中指明的功能/动作的装置。
这些计算机程序指令还可存储于能够指导计算机或其它可编程数据处理装置以特定的方式实现功能的计算机可读介质中,以使存储于计算机可读介质中的指令产生包括实现流程图和/或框图中的一个框或多个框中指明的功能/动作的指令装置。
计算机程序指令还可加载到计算机或其它可编程数据处理装置上,以引起在计算机上或其它可编程装置上执行一连串的操作步骤,以产生计算机实现的过程,从而使在计算机或其它可编程装置上执行的指令提供用于实现流程图和/或框图中的一个框或多个框中指明的功能/动作的过程。
附图中的流程图和框图示出根据本申请的多个实施例的系统、方法和计算机程序产品的可能实现的体系结构、功能和操作。在这点上,流程图或框图中的每个框可表示一个模块、区段或代码的一部分,其包括一个或多个用于实现特定逻辑功能的可执行指令。还应注意,在一些可替代性实施中,框中标注的功能可以不按照附图中标注的顺序发生。例如,根据所涉及的功能性,连续示出的两个框实际上可大致同时地执行,或者这些框有时以相反的顺序执行。还可注意到,可由执行特定功能或动作的专用目的的基于硬件的系统、或专用目的硬件与计算机指令的组合来实现框图和/或流程图示图中的每个框、以及框图和/或流程图示图中的多个框的组合。
虽然以上的叙述包括很多特定布置和参数,但需要注意的是,这些特定布置和参数仅仅用于说明本申请的一个实施方式。这不应该作为对本申请范围的限制。本领域技术人员可以理解,在不脱离本申请范围和精神的情况下,可对其进行各种修改、增加和替换。因此,本申请的范围应该基于所述权利要求来解释。