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