社区
数据结构与算法
帖子详情
求一个ID分配算法
Matzzh
2008-03-31 11:28:28
现在我想得到一个整数ID,这个ID值是在一个范围内(1~256)。当然这时可能有好几个线程不同模块都需要获取一个ID,也就是说,每个模块分得的ID是不同的。但当这个模块结束时,会释放掉这个ID,同时这个ID是可以再次被分配的。现在不考虑用数组、链表(一个使用ID链表,一个空闲ID链表)等方式,因为可能存在的ID范围可能会变大(1~2^32) 这时就可能不太现实了。希望能用一个比较奇淫的方式,时间、空间代价都比较小的算法。
...全文
284
5
打赏
收藏
求一个ID分配算法
现在我想得到一个整数ID,这个ID值是在一个范围内(1~256)。当然这时可能有好几个线程不同模块都需要获取一个ID,也就是说,每个模块分得的ID是不同的。但当这个模块结束时,会释放掉这个ID,同时这个ID是可以再次被分配的。现在不考虑用数组、链表(一个使用ID链表,一个空闲ID链表)等方式,因为可能存在的ID范围可能会变大(1~2^32) 这时就可能不太现实了。希望能用一个比较奇淫的方式,时间、空间代价都比较小的算法。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
lori_c
2008-04-02
打赏
举报
回复
每个算法都会有最优和最差情况,只能尽量求平均下的最优吧
如果ID使用率高,那就保存未使用的ID,如果使用率低,则保存已用的
把连续的ID组成1块来保存
这是空间上的
用Hash的方法,是缩短时间消耗的
看实际情况再修改吧
Matzzh
2008-03-31
打赏
举报
回复
To : guoruixing
同样存一个问题ID范围过大,你查看ID是否在线总得要保存ID的状态,这都是空间上的问题。其实我最想是能够通过当前已分配ID数,一个进似于数学上的算法解出一个合法的ID。比如一个HASH,并可以回收ID,或者一个空间坐标的映射关系。。。。
Matzzh
2008-03-31
打赏
举报
回复
考虑一个极端的情况,只分配一个ID,和所有ID都被分配。
上面已经说明了,一个线程中存在多个模块,也就是说可能一个线程中模块需要多个ID,我想过用HASH的方式来完成,最主要是如何将使用完成的ID回收回来,并且要考虑大范围ID,比如1~65536,做一个链表最少要 3 * 2(Byte) * 65536 = 393,216 = 393KB,这在嵌入式中已经是使用了很大的空间了。
“保存一个现在使用的最大的ID数,这之后的ID都是可用的”,假设现在有ID范围(1~256), 16个线程每个线程一共分配16个ID,256个ID都分配完了,这时10号线程第16号模块(ID:160)使用完了资源,释放掉这个ID。。。。。
guoruixing
2008-03-31
打赏
举报
回复
歪法:
如果线程不是很多,例如1000以内(^_^)
那就用在线法,
线程得到ID,然后看这个ID是否在线,如果在线(即被别的线程用了,就重新获取)
例如:QQ,MSN,网络游戏,论坛,等等,用户何止成千上万,但是如果该用户已经登录,则会有相应的提示出现。
lori_c
2008-03-31
打赏
举报
回复
我觉得LZ提供的信息不够,比如说ID的使用率大概是多少?
如果使用率比较高,我有下面几个想法:
1、让线程ID和获得的ID挂上钩,也就是用散列的思想
2、保存一个现在使用的最大的ID数,这之后的ID都是可用的,之前的可用ID则都储存起来,并把相邻的可用ID整合成一块,取用ID时尽量取用零散的。
不知道是否有标准的方法,不过我觉得优化的话还是跟你的程序有很大的关系。
有问题请指正,互相学习
【操作系统】分区
分配
算法
(首次适应
算法
、最佳适应
算法
)C语言
【操作系统】分区
分配
算法
(首次适应
算法
、最佳适应
算法
)(C语言实现) (编码水平较菜,写博客也只是为了个人知识的总结和督促自己学习,如果有错误,希望可以指出) 1.动态分区
分配
算法
: 为了实现动态分区
分配
...
操作系统:动态分区
分配
算法
目的:陆续整理近一年的学习收获 ...在实现可变分区
分配
时,将涉及到分区
分配
中所用的数据结构、分区
分配
算法
和分区的
分配
与回收操作这样三个问题。 首次适应
算法
(First Fit):
算法
...
操作系统——动态
分配
算法
(首次适应
算法
,最佳适应
算法
,最坏适应
算法
及回收)
分配
方式可分为四类:单一连续
分配
、固定分区
分配
、动态分区
分配
以及动态可重定位分区
分配
算法
四种方式,其中动态分区
分配
算法
就是此实验的实验对象。动态分区
分配
又称为可变分区
分配
,它是根据进程的实际需要,动态...
操作系统动态分区
分配
方式C/C++语言(首次适应
算法
(FF)循环首次适应
算法
(NF)最best适应
算法
(BF)最坏适应
算法
(WF))
为把
一个
新作业装入内存,须按照一定的
分配
算法
, 从空闲分区表或空闲分区链中出一分区
分配
给该作业。由于内存
分配
算法
对系统性能有很大的影响,故人们对它进行了较为广泛而深入的研究,于是产生了许多动态分区
分配
...
动态分区
分配
算法
(First Fit,Next Fit,Best Fit,Worst Fit)
连续
分配
方式是最早出现的一种存储器
分配
方式, 曾被广泛应用于上世纪60~ -80 年代的OS中,该
分配
万式为个用户程序
分配
一个
连续的内存空间, 即程序中代码或数据的逻辑地址相邻,体现在内存空间
分配
时物理地址的...
数据结构与算法
33,027
社区成员
35,335
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章