На Linux реализация по умолчанию для SecureRandom
NativePRNG
(исходный код здесь ), который имеет тенденцию быть очень медленным. В Windows значение по умолчанию SHA1PRNG
, который, поскольку другие указали, что можно также использовать на Linux при определении его явно.
NativePRNG
отличается от SHA1PRNG
и Математика Несвободного городского населения AESCounterRNG, в котором она непрерывно получает энтропию от операционной системы (путем чтения от /dev/urandom
). Другие PRNGs не получают дополнительной энтропии после отбора.
AESCounterRNG о 10x быстрее, чем SHA1PRNG
, который IIRC самостоятельно в два или три раза быстрее, чем NativePRNG
.
при необходимости в более быстром PRNG, который получает энтропию после инициализации, посмотрите, можно ли найти реализацию Java [1 110] Fortuna. Базовый PRNG реализации Fortuna идентичен используемому AESCounterRNG, но существует также сложная система объединения энтропии и автоматического пересева.
Он будет отличаться для каждой программы. Для чего-то столь же простого, как, скажем, взломщик паролей перебором, все, что действительно нужно было сохранить, - это последний использованный пароль. Для других приложений вам может потребоваться сохранить несколько точек данных, но это все, что вам нужно: сохранение и загрузка минимального объема информации, необходимой для восстановления того места, где вы были.
Другой распространенный метод - сохранить изображение всего состояние программы. Если вы когда-нибудь играли с эмулятором игровой консоли с возможностью сохранения состояния, то вот как они это делают. Похожая техника существует в Python с травлением. Если среда достаточно стабильна (например, нет переменных указателей), вы просто копируете все состояние памяти приложения в двоичный файл. Когда вы хотите возобновить, вы копируете его обратно в память и снова начинаете работать. Это дает вам почти идеальное восстановление состояния, но то, возможно ли это вообще, сильно зависит от среды / языка. (Например: большинство приложений C ++ не смогли бы сделать это без помощи ОС или если бы они были созданы ОЧЕНЬ тщательно с учетом этого.)
Использовать Постоянство .
Постоянство - это механизм, с помощью которого срок службы объекта превышает время выполнения программы.
Сохранение состояния объектов, участвующих в процесс на локальном жестком диске с использованием сериализации .
Для этого вам необходимо постоянно сохранять состояние (то есть, где вы находитесь в своих вычислениях). Таким образом, если вы прервете пробрам, когда он перезапустится, он будет знать, что он находится в середине вычисления и где он был в этом вычислении.
Вы также, вероятно, захотите, чтобы ваши основные вычисления выполнялись в отдельном потоке от вашего пользовательского интерфейса - таким образом вы можете отвечать на запросы «закрыть / прервать» из вашего пользовательского интерфейса и обрабатывать их соответствующим образом, останавливая / приостанавливая поток.