Обмен сообщениями


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

Распределённые системы доступа к объектам и удалённого вызова методов, вида ONC RPC, CORBA, RMI, DCOM, SOAP, .Net_Remoting, QNX Neutrino RTOS, OpenBinder, D-Bus и им подобные являются системами обмена сообщениями. Широкое применение подходов с обменом сообщениями также свойственно высокопроизводительным вычислениям, в частности, на нём основан интерфейс передачи сообщений MPI. В классе связующего программного обеспечения выделяется особая группа — промежуточное программное обеспечение, ориентированное на обработку сообщений, базирующееся на данном подходе.

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

Языки программирования, базирующиеся на этой модели, обычно определяют передачу сообщения, как посылку (обычно асинхронную; являющуюся копией) элемента данных конечному получателю (актору, процессу, потоку, сокету и так далее). Концепция сообщения является высокоуровневой версией датаграмм, за исключением того, что сообщения могут быть больше по размерам, чем пакет, и могут быть сделаны надёжными, стойкими, безопасными и при необходимости могут быть охвачены механизмом транзакций.

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

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