以下调用快速返回:
time dd if=/dev/random bs=1024 count=1
.... 0+1 records in
0+1 records out
49 bytes (49 B) copied, 0.000134028 s, 366 kB/s
real 0m0.004s
user 0m0.001s
sys 0m0.002s
但是,如果{1}}一个接一个地读取:
/dev/random
循环读取几个字节,然后阻塞几秒钟,然后读取另外几个字节。在键盘上键入随机字符可以大大加快这个过程,就像随机池中没有足够的熵一样。完成所有循环后需要很长时间才能完成。
什么使得逐字节读取for i in {1..500}; do dd if=/dev/random bs=1 count=1 status=none; done
比从中读取块慢得多?
Uname -a:
/dev/random
答案 0 :(得分:2)
答案在于你的问题:
49 bytes (49 B) copied, 0.000134028 s, 366 kB/s
所以它没有像告诉它那样复制1024个字节但只有少数然后停止。我认为这与它在阻止之前在循环中获得的数量相同。
/ dev / random很慢,因为它需要从不同来源收集随机性,只要没有可用,它就不会输出任何东西。
如果您需要更快的数字,请使用/ dev / urandom。
答案 1 :(得分:1)
除非您非常需要/dev/random
,否则您应该使用/dev/urandom
。
当您在池中没有足够的熵来为请求提供服务时,您注意到/dev/random
阻止,但如果没有足够的话,urandom
将回退到PRNG。< / p>