Linux的两种随机数生成器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux的两种随机数生成器相关的知识,希望对你有一定的参考价值。

Linux下有两个特殊设备文件/dev/random/de/urandom,用于生成随机数。

  1. /dev/random生成的随机数与当前使用的计算机硬件状态相关,提高了安全性,非常适合对随机数质量要求很高的场景。但是,如果硬件状态改变不足以提供足够多的信息给这个随机数生成器,读它产生的随机数的程序就会block住,一直等到有足够多的硬件状态改变导致数据生成为止。

  2. /dev/urandom又称为“无限”或者“非堵塞”("unlimited"[5]/non-blockingrandom source[4])随机数生成器,它生成随机数的机制与硬件状态无关,所以速度比/dev/random快的多。在我的笔记本虚机上测试的结果是生成160M大小的随机数需要大约25

 

用随机数生成器生成内容全是随机数的文件:

dd if=/dev/urandom of=/test/random bs=1024k count=10

 

由于随机数生成器速度有限,如果要用它生成随机数去测试磁盘写性能,可以先生成一个中间文件存放随机数,然后再去写入磁盘测试性能。

 

/dev/zero相比,/dev/urandom生成数据的速度要慢很多,在我的笔记本虚机上测试的结果是慢~20倍,结果如下:

 

[[email protected]~]$  time dd if=/dev/zero of=/dev/nullbs=160M count=1

1+0 records in

1+0 records out

167772160 bytes(168 MB) copied, 1.28577 s, 130 MB/s

 

real    0m1.289s

user    0m0.000s

sys     0m1.278s

[[email protected]~]$  time dd if=/dev/urandom of=/dev/nullbs=160M count=1

1+0 records in

1+0 records out

167772160 bytes(168 MB) copied, 23.488 s, 7.1 MB/s

 

real    0m23.491s

user    0m0.000s

sys     0m22.569s



 

在我的笔记本虚机上测试随机数生成器速度测试结果如下(供参考):

框中用几种不同的方法生成填满160M文件大小的随机数,耗时都24秒左右。

[[email protected]~]$  time dd if=/dev/urandom of=/dev/nullbs=16M count=10

10+0 records in

10+0 records out

167772160 bytes(168 MB) copied, 24.4058 s, 6.9 MB/s

 

real    0m24.409s

user    0m0.000s

sys     0m24.177s

[[email protected]~]$  time dd if=/dev/urandom of=/dev/nullbs=16k count=10000

10000+0 records in

10000+0 records out

163840000 bytes(164 MB) copied, 24.9815 s, 6.6 MB/s

 

real    0m24.982s

user    0m0.036s

sys     0m24.685s

[[email protected]~]$  time dd if=/dev/urandom of=/dev/nullbs=160M count=1

1+0 records in

1+0 records out

167772160 bytes (168MB) copied, 25.9681 s, 6.5 MB/s

 

real    0m25.971s

user    0m0.000s

sys     0m25.694s




 

 

 


以上是关于Linux的两种随机数生成器的主要内容,如果未能解决你的问题,请参考以下文章

产生随机数数组的两种方法

Java 生成随机数

单链表的链式存储的两种插入方式

Python爬虫获取随机的UserAgent的两种方法

java 如何创建一个类或方法能够给出产生指定位数的一个随机数?

伪随机数生成算法-梅森旋转(Mersenne Twister/MT)