Сериализация объектов: никакое состояние потока не может быть включено, правильно?

Вот пример, который немного более гибкий.

$('select.js-select-1').change(function(e) {
  var i = $("option:selected", this).index();
  var opts = $("option:gt(" + i + ")", this).clone();
  $('.js-select-2 option:gt(0)').remove();
  $('.js-select-2').append(opts);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<select class="js-select-1">
  <option disabled>Start date</option>
  <option>08AM</option>
  <option>09AM</option>
  <option>10AM</option>
  <option>11AM</option>
  <option>12PM</option>
  <option>01PM</option>
  <option>02PM</option>
  <option>03PM</option>
  <option>04PM</option>
  <option>05PM</option>
</select>

<select class="js-select-2">
  <option disabled>End date</option>
</select>

Каждый раз, когда вы изменяете дату начала, она обновляет дату окончания.

Надеюсь, что это помогает.

8
задан Jason Plank 1 November 2011 в 15:23
поделиться

7 ответов

Я не думаю, сериализируя только "некоторые потоки" программы, может работать, так как Вы столкнетесь с проблемами с синхронизацией (некоторые проблемы описаны здесь http://java.sun.com/j2se/1.3/docs/guide/misc/threadPrimitiveDeprecation.html). Так сохранение Вашей целой программы является единственным жизнеспособным способом получить согласованное состояние.

То, что Вы могли бы изучить, является ортогональной персистентностью. Существуют некоторые формирующие прототип реализации:

http://research.sun.com/forest/COM.Sun.Labs.Forest.doc.external_www.PJava.main.html

http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.17.7429

Но ни один из них больше не сохраняется или получил большую привлекательность (afaik). Я предполагаю, что установка контрольных точек не является лучшим решением, в конце концов. В моем собственном http://www.siebengeisslein.org проекта я пробую подход использования легких транзакций для диспетчеризации события, таким образом, состояние потока не должно сохраняться (так как в конце транзакции, стек вызовов потока пуст снова, и если операция останавливается в середине транзакции, все откатывается, таким образом, стек вызовов потока действительно имеет значение также). Вероятно, можно реализовать что-то похожее с любым OODBMS.

Другим способом посмотреть на вещи являются продолжения (http://en.wikipedia.org/wiki/Continuation, http://jauvm.blogspot.com/). Они - способ приостановить выполнение в определенных участках кода (но они не обязательно сохраняют состояние потока).

Я надеюсь, что это дает Вам некоторые начальные точки (но нет никакого готового к использованию решения этого afaik).

Править: После чтения Ваших разъяснений: необходимо определенно изучить OODBMS. Диспетчеризируйте каждое событие в его собственной транзакции и не заботьтесь о потоках.

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

Это действительно походит на сохранение состояния виртуальной машины и способности восстановить его, тот же самый путь точно, что Вы хотите.

Если все, в чем Вы нуждаетесь, должно смочь запустить программу, работающую с теми же данными, которые использовало предыдущее выполнение, то только необходимо сохранить прочь и восстановить персистентные данные, точное состояние каждого потока не должно действительно иметь значения, так как это изменится настолько быстро так или иначе - и исполнительные адреса вещей будут отличаться в следующий раз. Используя базу данных должен дать Вам эту способность так или иначе.

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

Похоже, что Вы хотите, имеют закрытие в C++. Поскольку Вы указали, там не механизм, встроенный в язык, чтобы позволить Вам сделать это. Насколько я знаю, что это в основном невозможно сделать полностью общим способом. В целом трудно сделать на языке, который не имеет VM. Можно фальсифицировать его несколько путем выполнения чего-то как Вы, предложили в основном создать объект закрытия, который поддерживает среду выполнения / состояние. Затем наличие этого сериализирует себя, когда это находится в известном состоянии.

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

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

Лучший подход, чем попытка сериализировать состояние программы должен был бы реализовать Катастрофический отказ Только программное обеспечение с установкой контрольных точек данных. Как Вы делаете Ваша установка контрольных точек данных будет зависеть от Вашей реализации и проблемной области.

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

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

Как пример для того, почему Вы хотите проявить этот подход, рассмотрите обновление без хита. Если Вы - рабочая версия N своего приложения и хотите обновить до версии N+1, можно сделать настолько использующую сериализацию объекта. Однако потоки "версии N+1" идут ot отличаться от потоков версии N.

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

Что-то вроде этого было на самом деле предложено для Java в JSR 323:

http://tech.puredanger.com/2008/01/09/strong-mobility-for-java/

но не был принят как являющийся слишком теоретическим:

http://tech.puredanger.com/2008/01/24/jcp-votes-down-jsr-323/

Если Вы переходите по ссылкам, можно найти некоторое интересное исследование в области этой проблемы.

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

Вы не должны пытаться сериализировать состояние, которое Ваша программа имеет к диску. Поскольку Ваша программа никогда не будет иметь полного контроля над состоянием it, если этому не позволит операционная система, в этом случае... это - часть операционной системы.

Вы не можете гарантировать, что указатель на некоторое местоположение виртуальной памяти укажет на то же местоположение виртуальной памяти снова (за исключением свойств как heap-begin/end, стек - начинаются), потому что к программе выбором операционных систем для виртуальной памяти является indeterministic. Страницы, которые Вы запрашиваете от ОС через sbrk или высокоуровневые интерфейсы, такие как malloc, начнутся где угодно.

Лучше:

  • Чистый код и осматривает Ваш дизайн: Какая государственная собственность является частью его?
  • Не используйте такой низкоуровневый язык, потому что издержки в создании, что Вы пытаетесь сделать, не стоят результатов.
  • Если необходимо использовать C, рассмотреть средства сделать жизнь максимально легкой (рассмотрите offsetof оператор, и структуры свойств имеют такой как первый участник, запускающийся при смещении 0).

Я подозреваю, что Вы хотите к ярлыку время разработки, которое требуется для сериализирования/десериализовывания определенных структур данных, таких как связанные списки. Уверьте, что Вы пытаетесь сделать, не тривиально, и это - намного больше работы. Если Вы настаиваете на том, чтобы делать так, рассматриваете изучение кода управления памятью Вашей операционной системы и в механизмы подкачки страниц ОС.;-)

ОТРЕДАКТИРУЙТЕ из-за добавленного вопроса: дизайн, который Вы заявляете, походит на некоторый конечный автомат; свойства объектов настраиваются таким образом, что они являются сериализуемыми, указатели функции могут быть восстановлены.

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

Во-вторых, относительно объектной установки: прохладные взгляды, не уверенный, если у Вас есть двоичный файл или другое объектное представление. Принятие двоичного файла: можно сериализировать их легко, если можно представить фактические структуры в памяти (который является небольшим количеством кодирования наверху). Вставьте некоторое ЗНАЧЕНИЕ ИДЕНТИФИКАТОРА КЛАССА при начинании объектов и взгляните таблица, которая указывает на фактический комплект оборудования. Посмотрите на первый sizeof (идентификатор) байты, и Вы знаете, какой вид структуры Вы имеете. Затем Вы будете знать, который структура кладет там.

При сериализации/десериализации, подход проблема как это: можно искать длину гипотетически упакованный (никакой интервал между участниками) структура, выделить тот размер и чтение-запись участники один за другим. Думайте offsetof или, если Ваш компилятор поддерживает его, просто используйте упакованные структуры.

ОТРЕДАКТИРУЙТЕ из-за полужирного базового вопроса :-) Нет, нет ни одного; не для C.

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

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