Как сохранить прогресс программы и возобновиться позже?

На 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, но существует также сложная система объединения энтропии и автоматического пересева.

5
задан Brad Mace 12 July 2011 в 02:55
поделиться

3 ответа

Он будет отличаться для каждой программы. Для чего-то столь же простого, как, скажем, взломщик паролей перебором, все, что действительно нужно было сохранить, - это последний использованный пароль. Для других приложений вам может потребоваться сохранить несколько точек данных, но это все, что вам нужно: сохранение и загрузка минимального объема информации, необходимой для восстановления того места, где вы были.

Другой распространенный метод - сохранить изображение всего состояние программы. Если вы когда-нибудь играли с эмулятором игровой консоли с возможностью сохранения состояния, то вот как они это делают. Похожая техника существует в Python с травлением. Если среда достаточно стабильна (например, нет переменных указателей), вы просто копируете все состояние памяти приложения в двоичный файл. Когда вы хотите возобновить, вы копируете его обратно в память и снова начинаете работать. Это дает вам почти идеальное восстановление состояния, но то, возможно ли это вообще, сильно зависит от среды / языка. (Например: большинство приложений C ++ не смогли бы сделать это без помощи ОС или если бы они были созданы ОЧЕНЬ тщательно с учетом этого.)

2
ответ дан 14 December 2019 в 19:16
поделиться

Использовать Постоянство .

Постоянство - это механизм, с помощью которого срок службы объекта превышает время выполнения программы.

Сохранение состояния объектов, участвующих в процесс на локальном жестком диске с использованием сериализации .

2
ответ дан 14 December 2019 в 19:16
поделиться

Для этого вам необходимо постоянно сохранять состояние (то есть, где вы находитесь в своих вычислениях). Таким образом, если вы прервете пробрам, когда он перезапустится, он будет знать, что он находится в середине вычисления и где он был в этом вычислении.

Вы также, вероятно, захотите, чтобы ваши основные вычисления выполнялись в отдельном потоке от вашего пользовательского интерфейса - таким образом вы можете отвечать на запросы «закрыть / прервать» из вашего пользовательского интерфейса и обрабатывать их соответствующим образом, останавливая / приостанавливая поток.

1
ответ дан 14 December 2019 в 19:16
поделиться
Другие вопросы по тегам:

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