我需要生成不可压缩的数据(因此伪随机),并且一直尝试使用下面的代码。但它只产生大约10MB / s的数据。我需要大约100-200 MB / s。 你有什么建议吗?
if ($length > 8*1024*1024){ //Default max string length in php.
while (($length - $bytesGenerated)>8*1024*1024){
$bytesGenerated = $bytesGenerated + (8*1024*1024);
print(openssl_random_pseudo_bytes(8*1024*1024));
}
}
print(openssl_random_pseudo_bytes($length - $bytesGenerated));
答案 0 :(得分:5)
如果你在linux下工作,你可以从/ dev / urandom读取它的内核快速伪随机生成器。
另一方面你可以使用openssl rand和pipe进入php。
答案 1 :(得分:4)
您需要加密安全的伪随机数吗?否则你可以尝试实现一个 Linear feedback shift register
答案 2 :(得分:2)
即使使用加速器,这对PHP也很难。 我会专门为这个特性编写C ++模块(但即使在C ++上也不是很容易)。
答案 3 :(得分:1)
在3GHz CPU(x86)上达到峰值理论最大性能时,如果您尝试达到200MB / s,则每个随机字节的预算不到4个CPU指令。真实世界的表现将远远低于此。我认为这在任何语言中都会非常困难。你很熟悉那些倾向于使用专用硬件加速器的速度(即你试图每秒1.56Gbit)。在网络或视频应用中,有相当数量的外部硬件专用于允许这种吞吐量。 C或程序集中的一个非常有效的实现可能允许你达到这个约束,但是你真的只能使用通用硬件来达到极限。
我会考虑预先生成数据(如已经建议的那样)或使用某种硬件加密加速器来击中类似这些吞吐量的任何东西。我找到了list of crypto accelerator hardware vendors。
作为最后的想法,你实际上每秒意味着200兆字节,对吧?如果你的意思是超级位那么这个问题就更容易解决了。