Connect with us

Разработка

Что такое Маршалинг

Маршалинг — это процесс преобразования данных, хранящихся в оперативной памяти, в формат, пригодный для передачи между различными частями программы, процессами или системами.

Опубликовано

/

     
     

Маршалинг (от англ. marshal — упорядочивать) — это процесс преобразования данных, хранящихся в оперативной памяти, в формат, пригодный для передачи между различными частями программы, процессами или системами. Этот механизм играет ключевую роль в современной разработке программного обеспечения, особенно при работе с распределёнными системами и межпроцессным взаимодействием.[1]

Основное определение

Маршализовать объект означает записать его состояние и кодовую базу (URI, указывающий на расположение кода класса объекта для загрузки) таким образом, чтобы при обратной операции — демаршалинге — получалась полная копия оригинала. Процесс применяется, когда информацию необходимо передавать между различными частями одной программы или от одной программы к другой.

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

Простыми словами

Представьте, что вам нужно отправить посылку другу в другой город. Вы не можете просто передать вещь из рук в руки — вам нужно упаковать её в коробку, написать адрес, отправить почтой, а друг должен распаковать и получить вашу вещь. Маршалинг работает точно так же, только с данными в программах.​ Маршалинг — это процесс упаковки данных из памяти компьютера в формат, который можно передать куда-то ещё: в другую программу, на другой компьютер по сети, или между разными частями одной программы.​

Отличие от сериализации

Многие разработчики путают маршалинг с сериализацией, но между ними есть важные различия:

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

Можно сказать, что маршалинг — это сериализация данных плюс кодовая база объекта. При маршалинге записываются различные дополнительные данные, которые говорят получателю объекта, что с ним делать и как.[2]

Маршалинг отличается от сериализации тем, что он особым образом применяется к удалённым объектам. Для удалённых объектов не создаётся копия самого объекта, а лишь указывается удалённый адрес, по которому должна производиться работа с ним.[1]

Области применения

Маршалинг используется в следующих сценариях:

  • Передача данных между управляемым и неуправляемым кодом — создание моста между средами выполнения (например, между C# и нативными библиотеками C++)
  • RPC-механизмы — удалённый вызов процедур для работы с объектами на других машинах
  • Межпроцессное взаимодействие — передача данных между различными процессами или потоками
  • COM-взаимодействие — упаковка и посылка вызовов методов COM-интерфейса через границу процесса
  • P/Invoke — вызов нативных функций из управляемого кода

Практические примеры

Маршалинг в C# и .NET

В .NET маршалинг — это подсистема, которая передаёт сообщения из управляемого окружения в неуправляемое и обратно. Это один из основных сервисов, предоставляемых CLR (Common Language Runtime).

Из-за того, что у многих типов в неуправляемом окружении нет таких же типов в управляемом окружении, необходимо создать подпрограммы преобразования, которые будут конвертировать управляемые типы в неуправляемые и наоборот. Например, типы HRESULTDWORDHANDLE существуют в C++ коде, но отсутствуют в .NET.

Маршалинг в Go

В языке Go маршалинг активно используется для преобразования объектов в JSON и обратно. Вы можете вставлять специальные теги в структуры, легко преобразовывая объект в данные JSON с помощью встроенной службы маршалинга.

Маршалинг в мобильной разработке

В Android и iOS маршалинг происходит при взаимодействии с нативными библиотеками через JNI (Java Native Interface) или при работе с системными API. Например, при передаче данных между Kotlin/Swift кодом и нативными C/C++ библиотеками требуется преобразование типов данных.

Типы маршалинга

Существует два основных вида маршалинга:

  • Стандартный маршалинг — практически автоматическая поддержка со стороны средств разработки
  • Ручной маршалинг — даёт максимальную гибкость и позволяет заменить реализацию процесса маршалинга на собственную

Демаршалинг

Демаршалинг — это обратный процесс, при котором стандартная заглушка (stub) в пространстве процесса сервера распаковывает отправленные параметры и передаёт их приложению объекта. Заглушка также упаковывает информацию ответа для отправки клиенту обратно.

Заключение

Маршалинг — это фундаментальный механизм в разработке программного обеспечения, который обеспечивает взаимодействие между различными компонентами системы. Понимание маршалинга критически важно при работе с распределёнными приложениями, межпроцессным взаимодействием и интеграцией различных технологических стеков. В отличие от простой сериализации, маршалинг предоставляет более полный контекст для восстановления объектов, включая информацию о кодовой базе и способах взаимодействия с удалёнными объектами.

Если вы нашли опечатку - выделите ее и нажмите Ctrl + Enter! Для связи с нами вы можете использовать info@apptractor.ru.
Telegram

Популярное

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: