2个版本
| 0.1.1 | 2024年1月27日 |
|---|---|
| 0.1.0 | 2024年1月27日 |
#1641 in 算法
13KB
178 行
rng_buffer
这个小型crate提供了RngBufferCore,一个包装任何rand::Rng的结构体,并实现了BlockRngCore,这样在用作rand_core::block::BlockRng64时,每次调用将获取更多字节数。这主要用于在使用rand::rngs::OsRng或远程RNG客户端时减少系统调用次数,目的在于您希望定期重新播种以防止随机数中的微妙模式,但不需要快速密钥擦除(主要适用于蒙特卡洛模拟和游戏服务器;我不建议用于加密或赌博)。在运行Linux HVM内核版本6.1.72-96.166.amzn2023.x86_64的EC2 c7i.metal-24xl实例上使用Vtune进行性能分析显示,使用每个线程256字节缓冲区(目前是默认值)将系统调用中的CPU周期数减少了80%。
以下也提供
RngBufferWrapper,它是RngBufferCore的包装器,允许您与所有克隆共享缓冲区。当使用与缓冲区大小相同的切片调用fill_bytes或try_fill_bytes时,它还将绕过缓冲区并直接调用包装的RNG。RngWrapper,这是一个包装任何Rng的结构体,它将任何Rc<RefCell<_>>,以便克隆将使用相同的实例。对于实现rand::rngs::ThreadRng的自定义替换很有用。thread_rng(),它是rand::thread_rng()的替代品,每个线程使用一个RngBufferCore,但其他行为相同。thread_seed_source(),它为OsRng的线程局部实例提供了一个RngBufferWrapper。build_default_seeder()和build_default_rng(),适用于无法使用线程局部变量的no_std环境。
依赖项
~0.8–1.5MB
~31K SLoC