【发布时间】:2014-10-11 09:54:50
【问题描述】:
假设我有一个客户端服务,每 10 秒需要真正的随机整数值(4 个字节)。
因此,我购买了一个硬件,它可以根据大气噪声生成真正的随机值。该设备每秒最多可生成 8 个字节的随机数据。
就我现在的情况,每 10 秒,我的客户端服务可以查询设备,并从生成的 8 个字节中提取 4 个字节。该值被客户端服务立即使用,并被认为是真正的随机。
现在假设我实例化了 3 个新的客户端服务(总共 4 个),运行相同的算法。服务都是同步的,所以会同时查询设备。
现在发生的情况是,在 10 秒标记处,只有 2 个服务(共 4 个)会立即收到随机值,而其他 2 个服务必须等待长达 1 秒才能收到它们的值.这是不可取的。
由于我宁愿最大限度地利用我昂贵的设备,我想出了这个解决方案:位于服务器(连接设备的地方)上的软件实际上会收集设备中的所有值,并将它们存储在一个队列(如果它对 RAM 来说太大,它将自动出队)。现在,当客户端服务进行查询时,随机值将从该队列中出列,而不是直接从设备中提取。和以前一样,每个随机值只使用一次,但在这种情况下,队列中的一些值可能已经坐了很长时间。
我担心我可能会以错误的方式使用此解决方案。我无法摆脱那种烦人的感觉,即使用过去生成的值,而不是“新鲜”的值,我以某种方式将其变回伪随机生成器。我的恐惧是正确的,还是没有根据的?
【问题讨论】:
-
如果一棵树倒在森林里……
-
如果我掷骰子,然后闭上眼睛几秒钟,然后看看我掷的是什么。那卷不再是随机的了吗?