CN109977373A - 标识号分配方法、标识号回收方法及装置 - Google Patents
标识号分配方法、标识号回收方法及装置 Download PDFInfo
- Publication number
- CN109977373A CN109977373A CN201910244647.1A CN201910244647A CN109977373A CN 109977373 A CN109977373 A CN 109977373A CN 201910244647 A CN201910244647 A CN 201910244647A CN 109977373 A CN109977373 A CN 109977373A
- Authority
- CN
- China
- Prior art keywords
- section
- identification number
- found
- occupied
- bitmap
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/12—Use of codes for handling textual entities
- G06F40/14—Tree-structured documents
- G06F40/146—Coding or compression of tree-structured data
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明提供了一种标识号分配方法、标识号回收方法及装置,该标识号分配方法包括:在分段式位图中查找未被占用满的一段位图,得到查找到的所述段位图的编号;在查找到的所述段位图中查找未被占用的一个位,将查找到的所述位的值由表示位未被占用的第一数值更改为表示位被占用的第二数值,并根据更改值后的所述位所在的所述段位图的所有位的值计算得到查找到的所述位的编号;根据查找到的所述位的编号和查找到的所述段位图的编号计算得到标识号,计算得到的所述标识号用于分配给一对象。通过上述方案本发明能够利用很小的存储空间满足多种标识号分配和回收需求。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种标识号(Identification,ID)分配方法、标识号回收方法及装置。
背景技术
在很多计算机领域的相关应用场景下和计算机软件系统中,都需要为一些特定的具有相同结构或功能的对象(或是软件组成部分)分配独一无二的数字标识,即标识号ID,从而对这些对象进行辨识、区分、管理和统计。一个典型的应用场景是,在现代计算机操作系统中,需要为每一个进程分配一个独一无二的标识号,这在操作系统的进程管理机制中是不可或缺的。另一个应用场景是,一些需要进行用户管理的软件系统,需要为每一个用户分配一个能够唯一标识这个用户的标识号,以便将其与其他用户加以区分。
在某些相对简单的应用场景下,比如,对系统的连续运行时间要求不高,或是需要获取标识号的对象的数量不是很多,这样的情况下对于标识号分配模块的要求就不会太多。但是也有一些场景,比如,操作系统,要求能够保证长达几年的连续运行时间,在这样的时间内,会有很多进程产生和消失,但是也有很多进程长期在后台运行。由于进程数量众多,系统运行时间久,进程结束和产生相对较频繁,这可能会导致占用大量存储空间,导致通过数值递增得到的标识号超过最大值限制,还会对结束进程的标识号的回收带来很多困难。
发明内容
有鉴于此,本发明提出了一种标识号分配方法、标识号回收方法及装置,以利用很小的存储空间满足多种标识号分配和回收需求。
为了实现上述目的,本发明采用以下方案:
根据本发明的一个方面,标识号分配方法包括:
在分段式位图中查找未被占用满的一段位图,得到查找到的所述段位图的编号;
在查找到的所述段位图中查找未被占用的一个位,将查找到的所述位的值由表示位未被占用的第一数值更改为表示位被占用的第二数值,并根据更改值后的所述位所在的所述段位图的所有位的值计算得到查找到的所述位的编号;
根据查找到的所述位的编号和查找到的所述段位图的编号计算得到标识号,计算得到的所述标识号用于分配给一对象。
在本发明一个实施例中,在分段式位图中查找未被占用满的一段位图,包括:按编号大小顺序依次判断分段式位图中每段位图是否满足其当前被占用位数小于其大小的条件,直到找到满足该条件的一段位图,作为查找到的未被占用满的一段位图。
在本发明一个实施例中,在查找到的所述段位图中查找未被占用的一个位,包括:按位的索引大小顺序依次判断查找到的所述段位图中的每个位是否满足其值等于所述第一数值的条件,直到找到满足该条件的一个位,作为查找到的未被占用的一个位。
在本发明一个实施例中,根据查找到的所述位的编号和查找到的所述段位图的编号计算得到标识号,包括:根据查找到的所述段位图的编号和所述分段式位图中各段位图的大小计算得到最后一个被占用满位的一段位图的最后一个位在所述分段式位图中的编号;根据查找到的所述位的编号和最后一个位在所述分段式位图中的编号计算得到标识号。
在本发明一个实施例中,标识号分配方法还包括:在未查找到未被占用满的一段位图的情况下,根据设定的一段位图的大小在所述分段式位图中增加新段位图;将所述新段位图中的各个位的值初始化为所述第一数值,根据所述分段式位图中已被占用满位的段位图的数量确定所述新段位图的编号,并将所述新段位图作为查找到的未被占用满的一段位图。
在本发明一个实施例中,根据设定的一段位图的大小在所述分段式位图中增加新段位图之前,所述的标识号分配方法还包括:判断所述分段式位图中所有段位图的数量是否小于设定数量,若是,则执行根据设定的一段位图的大小在所述分段式位图中增加新段位图的步骤,否则报错。
在本发明一个实施例中,所述分段式位图中每段位图的大小相同,所述第一数值为零,所述第二数值为一。
根据本发明的另一个方面,标识号回收方法适用于回收根据上述实施例所述的标识号分配方法得到的标识号,该标识号回收方法包括:
根据一已分配的标识号和分段式位图中每段位图的大小计算得到所述标识号所占用的位所在的一段位图的编号和所述标识号所占用的位在该段位图中的编号;
根据所述标识号所占用的位所在的一段位图的编号和所述标识号所占用的位在该段位图中的编号确定所述标识号所占用的位的位置;
将确定的所述位置处的位的值由表示位被占用的第二数值更改为表示位未被占用的第一数值,以用于再次分配标识号。
根据本发明的又一个方面,电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述实施例所述方法的步骤。
根据本发明的再一个方面,计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述实施例所述方法的步骤。
本发明的标识号分配方法、标识号回收方法、电子设备及计算机可读存储介质,根据分段式位图中未被占用满的一段位图中的未被占用的一个位得到标识号,用来分配给对象,由于分段式位图中可以方便地申请新段位图,所以以此可以方便地、动态地进行标识号分配,可以利用较小的内存空间满足标识号不同占用时间的多样需求。而且,每当一个位被占用,就将该位的值由一个数值更改为另一个数值,可以便于标识该位已被占用,从而能够保证分配给对象的标识号的唯一性,且便于标识号回收。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1是本发明一实施例的标识号分配方法的流程示意图;
图2是本发明一实施例中的根据位的编号和一段位图的编号计算得到标识号的方法流程示意图;
图3是本发明另一实施例的标识号配置方法的流程示意图;
图4是本发明再一实施例的标识号配置方法的流程示意图;
图5是本发明一实施例的标识号回收方法的流程示意图;
图6是本发明一实施例的标识号分配和回收的方法流程示意图;
图7是本发明一具体实施例中标识号分配所使用分段式位图的数据结构的示意图;
图8至图11是本发明一具体实施例中标识号分配和回收过程中的所使用分段式位图的数据结构的示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚明白,下面结合附图对本发明实施例做进一步详细说明。在此,本发明的示意性实施例及其说明用于解释本发明,但并不作为对本发明的限定。
针对系统运行时间长、标识号分配对象产生和结束量多的应用场景,本发明提出了一种标识号分配方法,基于分段式位图分配标识号,能够利用很小的存储空间满足多种标识号分配需求。
图1是本发明一实施例的标识号分配方法的流程示意图。如图1所示,一些实施例的标识号分配方法,可包括:
步骤S110:在分段式位图中查找未被占用满的一段位图,得到查找到的所述段位图的编号;
步骤S120:在查找到的所述段位图中查找未被占用的一个位,将查找到的所述位的值由表示位未被占用的第一数值更改为表示位被占用的第二数值,并根据更改值后的所述位所在的所述段位图的所有位的值计算得到查找到的所述位的编号;
步骤S130:根据查找到的所述位的编号和查找到的所述段位图的编号计算得到标识号,计算得到的所述标识号用于分配给一对象。
可以在收到为一对象分配标识号的请求时,执行上述步骤S110~步骤S130生成一个新的标识号,并分配给该请求中的对象。
在上述步骤S110中,分段式位图可以包括一段或多段位图,每段位图具有固定的大小,各段位图的大小可以相同或不同。每段位图可以包含一个或多个位,一段位图的可被占用的位的数量可以等于该段位图的大小。若一个位被占用表明该位对应的标识号被使用;若一个位未被占用表明该位对应的标识号被使用。一段位图中的位的值可以为0或1,例如,可以用0表示一个位未被占用,可以用1表示该位已被占用。若一段位图中的位均被占用,则表明该段位图已被占用满;若一段位图中存在未被占用的位,则表明该段位图未被占用满,未被占用满的一段位图中可以包括部分被占用的位,或不包括被占用的位,例如,当刚申请到一段位图时,其中的位均未被占用。
分段式位图中的每段位图不仅具有一定长度,还具有各自的编号,一段位图的编号可以用于唯一标识一段位图,可以用数字表示,例如,分段式位图中的各段位图可以按顺序编号。此外,每段段位图可以对应自己的计数器,用来对该段位图中被占用的位的数量进行计数,例如,一段位图中,每当有一个位被占用时,可以增加一,每当有一个位被回收时,可以减小一。
在上述步骤S120中,在分段式位图中可以按各段位图的编号的顺序查找未被占用满的一段位图,在一段位图中可以按为的顺序查找未被占用的位。例如,先根据各位图的编号按从小到大的顺序依次查找直到找到未被占用满的一段位图,再在未被占用满的该段位图中根据各个位的编号按从小到大的顺序依次查找直到找到未被占用的一个位。根据查找到的所述段位图可以得到相应段位图的编号,根据查找到的位在查找到的该段位图中的位置可以得到相应位的索引,所述位的索引能够用来唯一表示该位在一段位图中的位置。可以将查找到的所述位的值由表示位未被占用的第一数值(例如0)更改为表示位被占用的第二数值(例如1),从而表示查找到的这个位已被或将被占用,即用来得到一个标识号。对于查找到的未被占用满的那段位图,更改在其中查找到的未被占用的位之后,根据该段位图中各位的值可以计算得到查找到的位在该段位图中的编号,具体地,例如,在位的值为二进制数的情况下,可以将查找到的那段位图中的所有位的当前值构成的二进制数换算成十进制数,并将该十进制数作为查找到的位在该段位图中的编号(偏移量bias)。例如,一段未被占用满的位图中的各位的值为00011(1表示位被占用,0表示位未被占用),则从右数第三个位未被占用,则将00011更改为00111,可以将00111换算成十进制数7作为位的编号。在其他实施例中,根据更改值后的所述位所在的所述段位图的所有位的值可以计算得到查找到的所述位的索引,此时可以利用该索引作为位的编号。例如,一段未被占用满的位图中的各位的值为00011,从右开始索引号依次为1、2、3、4、5,则可利用索引号3作为位的编号。在其他实施例中,该第一数值可以为1,该第二数值可以为0。
在上述步骤S130中,所述位的编号能够用来唯一表示该段位图中的位的占用情况,所述段位图的编号能够用来唯一标识该段位图在整个分段式位图中位置,所以利用该段位图的编号和该位的编号可以得到唯一的符号,而该符号的具体值可根据具体生成方式的不同而不同。对象可以是计算机领域或计算机系统中需要相互区分、具有相同结果或相同功能的部分,或者说可以是软件的组成部分,例如,进程、用户等。得到的标识号例如可以作为全局标识号、用户标识号等。
本实施例中,根据分段式位图中未被占用满的一段位图中的未被占用的一个位得到标识号,用来分配给对象,由于分段式位图中可以方便地申请新段位图,所以以此可以方便地、动态地进行标识号分配,可以利用较小的内存空间满足标识号不同占用时间的多样需求。而且,每当一个位被占用,就将该位的值由一个数值更改为另一个数值,可以便于标识该位已被占用,从而能够保证分配给对象的标识号的唯一性,且便于标识号回收。
在一些实施例中,上述步骤S110中,即,在分段式位图中查找未被占用满的一段位图的具体实施方式,可包括:按编号大小顺序依次判断分段式位图中每段位图是否满足其当前被占用位数小于其大小的条件,直到找到满足该条件的一段位图,作为查找到的未被占用满的一段位图。例如,分段式位图各段位图的编号分别为1、2、3、…、level_id-1、level_id,则可以先判断编号为1的那段位图的当前被占用位数是否小于该段位图的大小level_size,再判断编号为2的那段位图的当前被占用位数是否小于该段位图的大小level_size,直到判断编号为n的那段位图的当前被占用位数是小于该段位图的大小level_size,其中,0<n<level_id,n为正整数,则编号为n的那段位图是找到的第一个未被占用满的一段位图,可将编号为n的那段位图作为查找到的未被占用满的一段位图。
在其他实施例中,可以按其他顺序,例如编号从大到小的顺序,或其他设定的顺序,依次判断分段式位图中每段位图是否满足其当前被占用位数小于其大小的条件,直到找到满足该条件的一段位图,作为查找到的未被占用满的一段位图。
进一步实施例中,每次需要分配查找未被占用满的一段位图的查找方式可以相同,以此可使占用满一段位图,再占用另一段位图,从而能够充分利用分段式位图中的位,进而提高分段式位图的存储空间的利用率。
在一些更具体地实施例中,分段式位图中的各段位图的大小可以一样,各段位图中的位的编号方式一样,例如,都是1、2、…level_size-1、level_size。
在一些实施例中,上述步骤S120中,即,在查找到的所述段位图中查找未被占用的一个位的具体实施方式,可包括:按位的索引大小顺序依次判断查找到的所述段位图中的每个位是否满足其值等于所述第一数值的条件,直到找到满足该条件的一个位,作为查找到的未被占用的一个位。例如,一段位图中各个位的索引分别为1、2、3、…、level_size-1、level_size,则可以先判断索引为1的位的当前的值是否等于第一数值,例如0,再判断索引为2的位的当前的值是否等于第一数值,直到判断索引为m的位的当前的值等于第一数值,其中,0<m<level_size,m为正整数,则索引为m的位是找到的第一个未被占用的位,可将索引为m的位作为查找到的未被占用的位。
图2是本发明一实施例中的根据位的编号和一段位图的编号计算得到标识号的方法流程示意图。如图2所示,在一些实施例中,上述步骤S130,即,根据查找到的所述位的编号和查找到的所述段位图的编号计算得到标识号,可包括:
步骤S131:根据查找到的所述段位图的编号和所述分段式位图中各段位图的大小计算得到最后一个被占用满位的一段位图的最后一个位在所述分段式位图中的编号;
步骤S132:根据查找到的所述位的编号和最后一个位在所述分段式位图中的编号计算得到标识号。
在上述步骤S131中,若分段式位图中各段位图的大小level_size均相等,如果编号为k的那段位图为未被占用满的一段位图,则可以通过level_size*k得到最后一个被占用满位的一段位图的最后一个位在所述分段式位图中的编号。在上述步骤S131中,若查找到的所述位的编号为j,则计算得到标识号可表示为level_size*k+j,或者,在level_size*k+j加上一个基准值base_id,即计算得到标识号可表示为base_id+level_size*k+j,其中,k、j为正整数,0<j<level_size。
图3是本发明另一实施例的标识号配置方法的流程示意图。如图3所示,图1所示的标识号配置方法的,还可包括:
步骤S140:在未查找到未被占用满的一段位图的情况下,根据设定的一段位图的大小在所述分段式位图中增加新段位图;
步骤S150:将所述新段位图中的各个位的值初始化为所述第一数值,根据所述分段式位图中已被占用满位的段位图的数量确定所述新段位图的编号,并将所述新段位图作为查找到的未被占用满的一段位图。
在步骤S140中,在分段式位图中成段位图的数量为零(例如初始化为零)时,或者,分段式位图中各段位图均已被占用满时,都查找不到未被占用满的一段位图。在此情况下,可以根据预先确定的配置参数,例如,一段位图的大小level_size、用第一数值表示位未被占用、用第二数值表示位已被占用等,向内存空间申请新的一段位图,其中,包含level_size个位。在步骤S150中,可以将新段位图中的各个位的值初始化为第一数值,例如0。在各段位图按数字顺序编号的情况下,若已被占用满位的段位图的数量为a,则可将新段位图的编号设置为a+1。此外,在利用计数器对新段位图中所占用的位的数量进行计数时,可以将该计数器初始化为0,每有一个位被占用就增加一。
通过上述步骤S140和步骤S150能够在分段式位图中没有一段位图或没有空闲的一段位图的情况下,新申请一段位图,这样可以根据需要动态地向内存空间申请位图,从而即能满足大量标识号申请的需求,又能节省内存空间。
图4是本发明再一实施例的标识号配置方法的流程示意图。如图4所示,图3所示的标识号配置方法,在步骤S140之前,即,根据设定的一段位图的大小在所述分段式位图中增加新段位图之前,还可包括:
步骤S160:判断所述分段式位图中所有段位图的数量是否小于设定数量,若是,则执行根据设定的一段位图的大小在所述分段式位图中增加新段位图的步骤,否则报错。
在步骤S160中,在配置分段式位图的相关参数时,可以设定分段式位图中位图的段数,在需要申请新段位图之前,可以先判断分段式位图的当前成段位图的数量,如果已经等于设定数量,则说明不能再增加新段位图,可以进行报错。分段式位图中成段位图的设定数量应谨慎配置,保证最大数量满足极端情况下的要求。
图5是本发明一实施例的标识号回收方法的流程示意图。如图5所示,一些实施例的标识号回收方法,适用于回收根据上述实施例所述的标识号分配方法得到的标识号,可包括:
步骤S210:根据一已分配的标识号和分段式位图中每段位图的大小计算得到所述标识号所占用的位所在的一段位图的编号和所述标识号所占用的位在该段位图中的编号;
步骤S220:根据所述标识号所占用的位所在的一段位图的编号和所述标识号所占用的位在该段位图中的编号确定所述标识号所占用的位的位置;
步骤S230:将确定的所述位置处的位的值由表示位被占用的第二数值更改为表示位未被占用的第一数值,以用于再次分配标识号。
在上述步骤S210中,该标识号可以是通过上述实施例所述的标识号分配方法得到的标识号。在分段式位图中各段位图的大小level_size相同的情况下,可以用该标识号除以一段位图的大小level_size,得到的倍数为已被占用满的成段位图的数量,得到的余数为该标识号所占用的位在其所在段位图中的编号,该编号可以是是该标识号分配时在该位为第二数值情况下由该段位图所有位构成的二进制数换算成的十进制数,或者可以是该位在该段位图中的索引。在分段式位图中各段位图的编号可以从1开始顺序编号的情况下,所得到的倍数即为已被占用满的成段位图的编号,所得到的余数即为该标识号所占用的位所在段位图已被占用的位的编号。上述步骤S210可以是在接收到标识号回收请求时才执行,标识号回收请求中应包含标识号。
在上述步骤S220中,根据所述标识号所占用的位所在的一段位图的编号能够找到该标识号占用的位所在段的位图,根据所占用位在该段位图中的编号可以通过由十进制数换算成二进制数,并利用该二进制数找到该位在该段位图中的位置及值。因为该标识号占用了找到的该位,所以该位的值应为表示该位已被占用的第二数值,例如1。
在上述步骤S230中,将该位的值由表示位被占用的第二数值(例如1)更改为表示位未被占用的第一数值(例如2)后,则该位表示未被占用,根据该位当前的值对应得到的标识号可以用于再次分配给对象,因此能够达到回收标识号的目的。此外,在各段位图利用各自的计数器对其各自的位的占用数量的情况下,在该位的值由表示位被占用的第二数值更改为表示位未被占用的第一数值的同时,可以将计数器的数值减一。
本实施例中,通过找到标识号在分段式位图中所占用的位的最终位置,并将该位的值由表示位被占用的第二数值更改为表示位未被占用的第一数值,能够实现对标识号的回收。
在一些实施例中,分段式位图中各段位图可以具有固定的、相同或不同的大小level_size。各段位图至可以包含一个或多个位。各段位图的编号和一段位图中的位可以按顺序进行编号,或者以其他方式编号,只要能够唯一标识一段位图或一个位并能用来找到已分配标识号占用的位即可。
基于与图1所示的标识号分配方法相同的发明构思,本发明实施例还提供了一种标识号分配装置,如下面实施例所述。由于该标识号分配装置解决问题的原理与标识号分配方法相似,因此该标识号分配装置的实施可以参见标识号分配方法的实施,重复之处不再赘述。
在一些实施例中,标识号分配装置可包括:位图编号获取单元、位的编号获取单元及标识号分配单元,上述各单元顺序连接。其中:
位图编号获取单元,用于在分段式位图中查找未被占用满的一段位图,得到查找到的所述段位图的编号;
位的编号获取单元,用于在查找到的所述段位图中查找未被占用的一个位,将查找到的所述位的值由表示位未被占用的第一数值更改为表示位被占用的第二数值,并根据更改值后的所述位所在的所述段位图的所有位的值计算得到查找到的所述位的编号;
标识号分配单元,用于根据查找到的所述位的编号和查找到的所述段位图的编号计算得到标识号,计算得到的所述标识号用于分配给一对象。
另外,本发明还提供一种标识号回收装置。在一些实施例中,标识号回收装置可包括:编号计算单元、占用位确定单元及标识号回收单元,上述各单元顺序连接。
编号计算单元,用于根据一已分配的标识号和分段式位图中每段位图的大小计算得到所述标识号所占用的位所在的一段位图的编号和所述标识号所占用的位在该段位图中的编号;
占用位确定单元,用于根据所述标识号所占用的位所在的一段位图的编号和所述标识号所占用的位在该段位图中的编号确定所述标识号所占用的位的位置;
标识号回收单元,用于将确定的所述位置处的位的值由表示位被占用的第二数值更改为表示位未被占用的第一数值,以用于再次分配标识号。
为使本领域技术人员更好地了解本发明,下面将以一具体实施例说明本发明的实施过程。
图6是本发明一实施例的标识号分配和回收的方法流程示意图。图7是本发明一具体实施例中标识号分配所使用分段式位图的数据结构的示意图。参见图6和图7,在一个具体实施例中,标识号分配方法可包括以下步骤:
S1:启动前配置参数,其中包括:分段式位图中的一段位图level的大小level_size,level的最大数量,基本数值base_id的数值。
S2:启动系统,初始level数量为0。
S3:当接收到获取新标识号的请求时,检查当前已经存在的level,如果level数量为0则进入步骤S4。如果level的数量不为0,则对每个level,检查它们的计数器counter,如果counter的数值等于level的大小level_size,则认为此level已满。若找到第一个counter的数值小于level_size的level,即没有被占用满的level,进入步骤S5,若没有找到且当前level的数量小于S1中所述的level的最大数量,则进入步骤S4。如果当前level数量等于S1中所述的level最大数量,则系统报错。
S4:在内存空间新申请一个level,其大小level_size由S1中的配置确定,其中有level_size个初始化为0的位,level的计数器counter初始化为0。新申请的level的编号level_id为当前level的数量,将新申请的level作为第一个找到的不满的level,进入步骤S5。
S5:从头到尾遍历当前得到的不为满的level,找到第一个为0的位,将该位的值置1,得到该位的编号bias(偏移量),对这个level的counter进行加一操作。
S6:得到新的标识号,其计算方法可为:base_id+(level_id-1)*level_size+bias。
对利用上述步骤S1~S6分配的标识号进行回收时,标识号回收方法可包括:
S7:当接收到某个标识号回收的请求时,根据其标识号数值,计算出其所在段位图的编号level_id和其占用的位在该段位图中的编号bias,找到相应的一段位图level,对其该段位图的计数器counter进行减一操作,将位的编号bias对应的位置0。
其中,上述实施例中,所述的步骤S1中的level,是一个大小固定的位图,其包含参数level_size(位的数量)、level_id(编号)、counter(位使用数量计数器)等。
上述实施例所述的步骤S3中的“当前level数量等于S1中所述的level最大数量”系统错误,通常情况下,是由使用者定义level最大数量不满足使用的应用场景导致的,在配置level最大数量时,应谨慎配置,保证最大数量满足极端情况下的要求。
图8至图11是本发明一具体实施例中标识号分配和回收过程中的所使用分段式位图的数据结构的示意图。需要说明的是,为更明显易懂,图7至图11中的bias所在行中不同位对应的编号bias用1、2、3……、level_size-1、level_size等顺序编号的数字(可作为索引)来表示,实际上,每段位图中的位对应的编号可以通过由该段位图的所有位构成的二进制数换算为十进制数得到。参见图6至图11,标识号分配和回收的方法可包括如下过程:
步骤a:位图使用情况如图8中s1所示,此时接收到一个标识号申请的请求,检查当前的两个level,发现均没有空余的位,则新建一个level,将其第一位置为1,这个level的counter此时为1,如图9中s2所示。
步骤b:假设base_id为0,则新申请的标识号为:0+2*level_size+1。
步骤c:位图使用情况如图9中s2所示,此时接收到一个标识号(例如数值为3)回收请求,根据标识号数值除以level_size得0余3,找到第0+1个level中bias为3的位,将其置0,这个level的counter减1。如图10中s3所示。
步骤d:位图使用情况如图10中s3所示,此时接收到一个标识号申请的请求,检查当前的三个level,发现第一个level的counter数值为level_size-1,于是直接在第一个level中找空闲的位,找到bias为3的位,将其置1,之后这个level的counter加1。根据level_id和bias计算出新申请的标识号。此时位图使用情况如图11中s4所示。
本实施例的优点在于:动态申请level,节省内存空间,在标识号频繁申请、回收的情况下,可以保证以很小的内存空间满足很多标识号分配请求。内存的申请和回收快速高效,申请过程中查找空闲标识号的过程使用分段检索,可以很快找到分段位图中的空闲位。高效回收标识号,能够尽可能保证标识号范围不超过最大值,参数配置和应用场景合理的情况下能够保证系统长时间稳定运行。
本发明实施例还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述实施例所述方法的步骤。
本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述实施例所述方法的步骤。
综上所述,本发明实施例的标识号分配方法、标识号回收方法、电子设备及计算机可读存储介质,根据分段式位图中未被占用满的一段位图中的未被占用的一个位得到标识号,用来分配给对象,由于分段式位图中可以方便地申请新段位图,所以以此可以方便地、动态地进行标识号分配,可以利用较小的内存空间满足标识号不同占用时间的多样需求。而且,每当一个位被占用,就将该位的值由一个数值更改为另一个数值,可以便于标识该位已被占用,从而能够保证分配给对象的标识号的唯一性,且便于标识号回收。
在本说明书的描述中,参考术语“一个实施例”、“一个具体实施例”、“一些实施例”、“例如”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。各实施例中涉及的步骤顺序用于示意性说明本发明的实施,其中的步骤顺序不作限定,可根据需要作适当调整。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种标识号分配方法,其特征在于,包括:
在分段式位图中查找未被占用满的一段位图,得到查找到的所述段位图的编号;
在查找到的所述段位图中查找未被占用的一个位,将查找到的所述位的值由表示位未被占用的第一数值更改为表示位被占用的第二数值,并根据更改值后的所述位所在的所述段位图的所有位的值计算得到查找到的所述位的编号;
根据查找到的所述位的编号和查找到的所述段位图的编号计算得到标识号,计算得到的所述标识号用于分配给一对象。
2.如权利要求1所述的标识号分配方法,其特征在于,在分段式位图中查找未被占用满的一段位图,包括:
按编号大小顺序依次判断分段式位图中每段位图是否满足其当前被占用位数小于其大小的条件,直到找到满足该条件的一段位图,作为查找到的未被占用满的一段位图。
3.如权利要求1所述的标识号分配方法,其特征在于,在查找到的所述段位图中查找未被占用的一个位,包括:
按位的索引大小顺序依次判断查找到的所述段位图中的每个位是否满足其值等于所述第一数值的条件,直到找到满足该条件的一个位,作为查找到的未被占用的一个位。
4.如权利要求1所述的标识号分配方法,其特征在于,根据查找到的所述位的编号和查找到的所述段位图的编号计算得到标识号,包括:
根据查找到的所述段位图的编号和所述分段式位图中各段位图的大小计算得到最后一个被占用满位的一段位图的最后一个位在所述分段式位图中的编号;
根据查找到的所述位的编号和最后一个位在所述分段式位图中的编号计算得到标识号。
5.如权利要求1所述的标识号分配方法,其特征在于,还包括:
在未查找到未被占用满的一段位图的情况下,根据设定的一段位图的大小在所述分段式位图中增加新段位图;
将所述新段位图中的各个位的值初始化为所述第一数值,根据所述分段式位图中已被占用满位的段位图的数量确定所述新段位图的编号,并将所述新段位图作为查找到的未被占用满的一段位图。
6.如权利要求5所述的标识号分配方法,其特征在于,根据设定的一段位图的大小在所述分段式位图中增加新段位图之前,还包括:
判断所述分段式位图中所有段位图的数量是否小于设定数量,若是,则执行根据设定的一段位图的大小在所述分段式位图中增加新段位图的步骤,否则报错。
7.如权利要求1所述的标识号分配方法,其特征在于,所述分段式位图中每段位图的大小相同,所述第一数值为零,所述第二数值为一。
8.一种标识号回收方法,其特征在于,适用于回收根据如权利要求1至7任一项所述的标识号分配方法得到的标识号,包括:
根据一已分配的标识号和分段式位图中每段位图的大小计算得到所述标识号所占用的位所在的一段位图的编号和所述标识号所占用的位在该段位图中的编号;
根据所述标识号所占用的位所在的一段位图的编号和所述标识号所占用的位在该段位图中的编号确定所述标识号所占用的位的位置;
将确定的所述位置处的位的值由表示位被占用的第二数值更改为表示位未被占用的第一数值,以用于再次分配标识号。
9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至8任一项所述方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1至8任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910244647.1A CN109977373B (zh) | 2019-03-28 | 2019-03-28 | 标识号分配方法、标识号回收方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910244647.1A CN109977373B (zh) | 2019-03-28 | 2019-03-28 | 标识号分配方法、标识号回收方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109977373A true CN109977373A (zh) | 2019-07-05 |
CN109977373B CN109977373B (zh) | 2020-10-02 |
Family
ID=67081331
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910244647.1A Active CN109977373B (zh) | 2019-03-28 | 2019-03-28 | 标识号分配方法、标识号回收方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109977373B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110532457A (zh) * | 2019-07-30 | 2019-12-03 | 济南浪潮数据技术有限公司 | 一种获取网络段id方法及系统 |
CN111027290A (zh) * | 2019-11-22 | 2020-04-17 | 贝壳技术有限公司 | 一种数据报告命名方法、装置、电子设备和存储介质 |
CN116418783A (zh) * | 2023-06-12 | 2023-07-11 | 太初(无锡)电子科技有限公司 | 一种id编号动态重分配的方法、计算机设备及介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1671114A (zh) * | 2004-03-19 | 2005-09-21 | 华为技术有限公司 | 一种ip地址管理的方法 |
US20090144794A1 (en) * | 2001-06-04 | 2009-06-04 | Cisco Technology, Inc. | System and Method for Allocating Packet Identifiers in a Transport Stream in a Subscriber Network |
CN104063288A (zh) * | 2013-03-22 | 2014-09-24 | 腾讯科技(深圳)有限公司 | 进程管理方法及装置 |
CN104899204A (zh) * | 2014-03-05 | 2015-09-09 | 腾讯科技(深圳)有限公司 | 数据存储方法及装置 |
CN109446202A (zh) * | 2018-11-09 | 2019-03-08 | 上海达梦数据库有限公司 | 标识符分配方法、装置、服务器和存储介质 |
-
2019
- 2019-03-28 CN CN201910244647.1A patent/CN109977373B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090144794A1 (en) * | 2001-06-04 | 2009-06-04 | Cisco Technology, Inc. | System and Method for Allocating Packet Identifiers in a Transport Stream in a Subscriber Network |
CN1671114A (zh) * | 2004-03-19 | 2005-09-21 | 华为技术有限公司 | 一种ip地址管理的方法 |
CN104063288A (zh) * | 2013-03-22 | 2014-09-24 | 腾讯科技(深圳)有限公司 | 进程管理方法及装置 |
CN104899204A (zh) * | 2014-03-05 | 2015-09-09 | 腾讯科技(深圳)有限公司 | 数据存储方法及装置 |
CN109446202A (zh) * | 2018-11-09 | 2019-03-08 | 上海达梦数据库有限公司 | 标识符分配方法、装置、服务器和存储介质 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110532457A (zh) * | 2019-07-30 | 2019-12-03 | 济南浪潮数据技术有限公司 | 一种获取网络段id方法及系统 |
CN110532457B (zh) * | 2019-07-30 | 2022-05-24 | 济南浪潮数据技术有限公司 | 一种获取网络段id方法及系统 |
CN111027290A (zh) * | 2019-11-22 | 2020-04-17 | 贝壳技术有限公司 | 一种数据报告命名方法、装置、电子设备和存储介质 |
CN116418783A (zh) * | 2023-06-12 | 2023-07-11 | 太初(无锡)电子科技有限公司 | 一种id编号动态重分配的方法、计算机设备及介质 |
CN116418783B (zh) * | 2023-06-12 | 2023-09-29 | 太初(无锡)电子科技有限公司 | 一种id编号动态重分配的方法、计算机设备及介质 |
Also Published As
Publication number | Publication date |
---|---|
CN109977373B (zh) | 2020-10-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Liu et al. | A new improved NEH heuristic for permutation flowshop scheduling problems | |
CN109977373A (zh) | 标识号分配方法、标识号回收方法及装置 | |
US8538150B2 (en) | Method and apparatus for segmenting multi-view images into foreground and background based on codebook | |
CN110096528A (zh) | 一种分布式系统中生成序列的方法、装置及系统 | |
CN110019353B (zh) | 一种数据处理方法及装置 | |
CN112395293A (zh) | 分库分表方法、分库分表装置、分库分表设备及存储介质 | |
US20140089932A1 (en) | Concurrency identification for processing of multistage workflows | |
CN110389822A (zh) | 执行任务的节点调度方法、装置和服务器 | |
CN106777130B (zh) | 一种索引生成方法、数据检索方法和装置 | |
US20170161109A1 (en) | Consistent hashing | |
Khorasanian et al. | An iterated greedy algorithm for solving the blocking flow shop scheduling problem with total flow time criteria | |
Potters et al. | Computing the nucleolus by solving a prolonged simplex algorithm | |
CN111414528B (zh) | 确定设备标识的方法、装置、存储介质及电子设备 | |
Epstein et al. | A unified approach to truthful scheduling on related machines | |
CN109165712A (zh) | 分布式分期号的生成方法、装置和计算机存储介质 | |
CN110109867A (zh) | 改进在线模式检测的方法、装置和计算机程序产品 | |
CN111176838B (zh) | 为二分图中的节点分配嵌入向量的方法以及装置 | |
CN104794128A (zh) | 数据处理方法和装置 | |
KR101541156B1 (ko) | 다차원 기법의 시공간 결정적 태스크 스케줄링 장치 및 방법 | |
CN114924842A (zh) | 一种虚拟机系统的资源管理方法 | |
CN111339371A (zh) | 一种数据处理方法及装置 | |
CN113762668B (zh) | 生成任务单的方法的和装置 | |
CN110083438B (zh) | 事务分发方法、装置、设备和存储介质 | |
CN110147289A (zh) | 异常消息筛选方法和装置以及计算机可读存储介质 | |
Fukunaga et al. | Robust cost colorings. |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |