2 个不稳定版本
0.2.0 | 2020年12月13日 |
---|---|
0.1.0 | 2019年7月14日 |
#2071 在 算法
17KB
213 行
rng - 一个随机数生成器命令行工具。
包含多个(伪)随机数生成算法。给定其中一个算法,它将从这个算法生成的无限字节流写入标准输出。
在 Unix 术语中,它可以看作是 cat /dev/urandom
的等价物,但可以选择不同(大多数是用户空间)的伪随机数生成算法。这通常比 /dev/urandom
快得多,但根据选择的算法,也可能提供更低的熵输出。
这个工具基本上是令人惊叹的 rand
库的命令行前端。
使用方法
rng [--seed <seed>] [--max threads] [--verbose] [<algorithm>]
如果没有给出参数,它将使用默认算法并从操作系统获取种子。您可能需要更改算法以适应您的需求。例如,您可能需要一个不是加密安全的更快的算法。
--seed <seed>
参数使用给定的 <seed>
初始化随机数算法,而不是从操作系统获取一些熵。您不希望将其用于任何加密目的。提供种子在您需要可预测性和必须能够在多次运行中产生相同数据时非常有用。
--max-threads
参数设置在多线程模式下工具可以使用的最大线程数。默认情况下,这是系统上可用的硬件线程数。例外情况是当指定了 --seed
或算法是 "os" 时,则工具始终以单线程模式运行。
示例
我们尝试多次使用 PCG 算法。在这里,我们可以看到没有种子时每次产生的输出都不同,而有种子时只要种子相同,就会产生相同的数据。
$ rng pcg | dd count=1024 | shasum
ae148d8b54ee544a50833c2a6915b0fca4cb95ed -
$ rng pcg | dd count=1024 | shasum
65a5651a2b1201adbe8bf60d9f7a2b940f6e188b -
$ rng pcg --seed 6 | dd count=1024 | shasum
fc14baccbc847339408457335dc67bc4c9785185 -
$ rng pcg --seed 6 | dd count=1024 | shasum
fc14baccbc847339408457335dc67bc4c9785185 -
$ rng pcg --seed 7 | dd count=1024 | shasum
c7a169d195c395867396d16d70c1a3c19f63b5cc -
为什么?
这个工具的发明是因为我需要在Linux上对IO(文件系统和网络)进行基准测试。从/dev/urandom
读取太慢了,机器花费了太多时间来计算实际数据,而测试所需执行的IO时间太少。另一方面,从/dev/zero
获取数据很快!但是任何压缩(在网络协议和文件系统中都很常见)都将能够优化这个流,几乎变成无。而且,实际的IO并没有得到适当的基准测试。
所以我需要的是一个非常快的不可压缩数据流。《code>rand软件包提供了一个统一的接口,用于访问多种不同的随机数算法。其中一些非常适合我的使用案例。
依赖关系
~4MB
~69K SLoC