Генерация быстрых псевдослучайных данных в PHP

Мне нужно сгенерировать несжимаемые данные (следовательно, псевдослучайные), и я пытался с кодом ниже. Но он производит только около 10 МБ / с данных. Мне нужно около 100-200 МБ / с. Есть ли у вас какие-либо советы?

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));
7
задан Charles 24 December 2012 в 00:03
поделиться

4 ответа

если вы работаете под linux, вы можете просто прочитать из /dev/urandom, его ядра быстрый генератор псевдослучайных чисел.

с другой стороны, вы можете использовать openssl rand и передать его в php.

5
ответ дан 6 December 2019 в 21:08
поделиться

Это будет тяжело для PHP, даже с ускорителями. Я бы написал модуль C++ специально для этой функции (но даже на C++ это не очень просто).

2
ответ дан 6 December 2019 в 21:08
поделиться

При пиковой теоретической максимальной производительности на процессоре с тактовой частотой 3 ГГц (x86) у вас будет бюджет чуть менее 4 инструкций ЦП на случайный байт, если вы попытаетесь достичь скорости 200 МБ/с. Реальная производительность будет значительно ниже этой. Я бы сказал, что это будет чрезвычайно сложно на любом языке. Вы хорошо разбираетесь в скоростях, которые, как правило, используют выделенный аппаратный ускоритель (т. Е. Вы пытаетесь сделать 1,56 Гбит в секунду). В сетевых или видеоприложениях имеется значительное количество внешнего оборудования, предназначенного для обеспечения такой пропускной способности. Чрезвычайно эффективная реализация на C или ассемблере может позволить вам обойти это ограничение, но на самом деле вы достигаете пределов возможного, используя только аппаратное обеспечение общего назначения.

Я бы рассмотрел либо предварительную генерацию данных (как уже было предложено), либо использование какого-либо аппаратного криптоускорителя, чтобы достичь чего-либо, похожего на такие пропускные способности. Я нашел этот список поставщиков оборудования для криптоускорителей.

Напоследок, вы ведь имели в виду 200 мегабайт в секунду, верно? Если вы имели в виду мегабит, то эта проблема решается гораздо проще.

1
ответ дан 6 December 2019 в 21:08
поделиться

Вам нужны криптографически безопасные псевдослучайные числа? В противном случае вы можете попытаться реализовать Сдвиговый регистр с линейной обратной связью

4
ответ дан 6 December 2019 в 21:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: