Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 在10亿次迭代中获得相同GUID的几率有多大?_.net_Guid - Fatal编程技术网

.net 在10亿次迭代中获得相同GUID的几率有多大?

.net 在10亿次迭代中获得相同GUID的几率有多大?,.net,guid,.net,Guid,我正在做一个项目,我需要生成大约10亿个guid 我知道guid不一定是唯一的,但几乎所有的时间都是唯一的 如果我生成了十亿个guid,那么匹配的概率是多少? n概率 68719476736=2^36=0.0000000000000004=4×10^−(16) 2199023255552=2^41=0.0000000000004=(4×10^−(十三) 70368744177664=2^46=0.0000000004=(4×10^−10) 如果您是从同一台机器创建guid并使用相同的算法,则不会

我正在做一个项目,我需要生成大约10亿个guid

我知道guid不一定是唯一的,但几乎所有的时间都是唯一的

如果我生成了十亿个guid,那么匹配的概率是多少?

n概率

68719476736=2^36=0.0000000000000004=4×10^−(16)

2199023255552=2^41=0.0000000000004=(4×10^−(十三)


70368744177664=2^46=0.0000000004=(4×10^−10)

如果您是从同一台机器创建guid并使用相同的算法,则不会发生冲突。

.NET GUID由以下部分组成:

  • 60位时间戳
  • 48位计算机标识符
  • 14位uniquifier,和
  • 六位是固定的

所以Oscar引用的UUID概率在这里不起作用。但是,如果你从一台计算机上创建了所有10亿个GUID,那么就没有机会得到一个副本(除非你在玩时钟;-)

你将在多长时间内生成GUID的可能副本?这将在一批中完成,因此,无论需要多长时间,您都需要确保在每个GUID生成之间经过足够的时间,以允许时间再次变得唯一。我不知道要多久,那是你唯一关心的。我建议多台计算机并行工作@时间戳值的分辨率为100ns,因此假设它是从具有类似分辨率的计时器获得的,它应该可以,因为在当前常规硬件上,时间戳增量之间不会生成超过2^14个GUID(4GHz的四核需要能够为四分之一的cpu周期创建GUID;因此,一次增量、一次或两次移动可能需要64个核才能开始接近)。他说的是.NET GUID,它们并不像文章中假设的那样完全是随机的。有些部分是由时间和处理器id(?)引起的…但在同一台机器上获得10亿个guid副本的可能性很小,甚至可能是不可能的。