NHibernate в разъединенных сценариях

Выполнение работы в срок является функцией приложения, которое Вы пишете. RTOS просто предоставляет услуги, которые помогают Вам с выполнением работы в срок. Вы могли также программировать на "чистом металле" (w/o RTOS) в большом основном цикле и встретить Вас крайние сроки.

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

Некоторые средства RTOS обеспечьте:

  • Основанный на приоритете Планировщик
  • Системная стандартная программа Прерывания по синхроимпульсам
  • Детерминированное поведение

Основанный на приоритете Планировщик

Большинство RTOS имеет между 32 и 256 возможными приоритетами для отдельных задач/процессов. Планировщик выполнит задачу с самым высоким приоритетом. Когда выполняющаяся задача бросает ЦП, следующие самые высокие приоритетные выполнения задачи, и так далее...

самая высокая приоритетная задача в системе будет иметь ЦП до:

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

Как разработчик, это - Ваше задание для присвоения приоритетов задачи, таким образом, что сроку успеют.

Системные стандартные программы Прерывания по синхроимпульсам

RTOS будет обычно обеспечивать своего рода системные часы (где угодно от 500 нас к 100 мс), который позволяет Вам выполнять секретные операции времени. Если у Вас есть системные часы на 1 мс, и необходимо сделать задачу каждые 50 мс, обычно существует API, который позволяет Вам говорить "В 50 мс, будить меня". В той точке спала бы задача, пока RTOS не будит ее.

Примечание, что просто быть разбуженным не обеспечивает Вас, будет работать точно в то время. Это зависит от приоритета. Если задача с более высоким приоритетом в настоящее время работает, Вы могли бы быть задержаны.

Детерминированное Поведение

RTOS переходит к большой длине, чтобы гарантировать, что, есть ли у Вас 10 задач или 100 задач, это не берет больше, чтобы переключить контекст, определить, какова следующая самая высокая приоритетная задача, и т.д.

В целом, операция RTOS пытается быть O (1).

Одной из главных областей для детерминированного поведения в RTOS является обработка прерываний. Когда линия прерывания сообщена, RTOS сразу переключается на корректную Процедуру обработки прерывания и обрабатывает прерывание незамедлительно (независимо от приоритета любой задачи, в настоящее время работающей).

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

Это - грубое обобщение и как со всем остальным, существует большое множество реализаций RTOS. Некоторые RTOS делают вещи по-другому, но описание выше должно быть применимо к значительной части существующего RTOSes.

6
задан Patrick Peters 8 June 2009 в 19:52
поделиться

2 ответа

Мы пробовали это в архитектуре клиент-сервер. Переходим к DTO (объектам передачи данных). Это означает, что отсоединенные сущности больше не отправляются напрямую клиенту, а специализированные объекты.

Основная причина двигаться в этом направлении не NHibernate, это фактически сериализация, необходимая для отправки сущностей клиенту. Хотя вы можете использовать отложенную загрузку (и вы это сделаете!), Пока вы подключены к сеансу, вам нужно получить все ссылки из базы данных, чтобы сериализовать ее.

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

Кроме того, работа с отсоединением может работать хорошо.

  • Будьте осторожны с отложенной загрузкой, что приведет к возникновению исключений при доступе к незагруженным объектам в отсоединенном экземпляре.
  • Будьте осторожны с параллелизмом, высока вероятность того, что сущности изменились, пока они были отсоединены.
  • Будьте осторожны, если вам нужна какая-то защита или даже если вы хотите, чтобы ваш сервер мог вносить некоторые изменения в данные. Отсоединенные объекты потенциально могут вернуться в любом состоянии.
4
ответ дан 16 December 2019 в 21:45
поделиться

Вы можете ознакомиться с методами сеанса SaveOrUpdateCopy и Merge .

Вот статья, которая дает вам более подробную информацию: Функция NHibernate: SaveOrUpdateCopy & Merge

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

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