Jump to content

Передача сообщений

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

Передача сообщений широко распространена в современном компьютерном программном обеспечении . [ нужна ссылка ] Он используется как способ работы объектов, составляющих программу, друг с другом, а также как средство объектов и систем, работающих на разных компьютерах (например, в Интернете взаимодействия ). Передача сообщений может осуществляться различными механизмами, включая каналы .

Обзор [ править ]

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

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

Один из первых примеров того, как это можно использовать, был в области компьютерной графики. Манипулирование графическими объектами сопряжено с различными сложностями. Например, простое использование правильной формулы для вычисления площади замкнутой фигуры будет варьироваться в зависимости от того, является ли эта фигура треугольником, прямоугольником, эллипсом или кругом. В традиционном компьютерном программировании это привело бы к длинным операторам IF-THEN, проверяющим, какой тип объекта представляет собой форма, и вызову соответствующего кода. Объектно-ориентированный способ справиться с этим — определить класс с именем Shape с подклассами, такими как Rectangle и Ellipse (которые, в свою очередь, имеют подклассы Square и Circle), а затем просто отправить сообщение любому Shape попросив его вычислить его площадь. Каждый Shape объект затем вызовет метод подкласса с формулой, подходящей для этого типа объекта. [1]

Распределенная передача сообщений предоставляет разработчикам уровень архитектуры, который предоставляет общие сервисы для создания систем, состоящих из подсистем, которые работают на разных компьютерах в разных местах и ​​в разное время. Когда распределенный объект отправляет сообщение, уровень обмена сообщениями может решить такие проблемы, как:

  • Поиск процесса с использованием разных операционных систем и языков программирования в разных местах, откуда пришло сообщение.
  • Сохранение сообщения в очереди, если соответствующий объект для обработки сообщения в данный момент не запущен, а затем вызов сообщения, когда объект доступен. Кроме того, при необходимости сохраняется результат до тех пор, пока отправляющий объект не будет готов его принять.
  • Управление различными транзакционными требованиями для распределенных транзакций, например, атомарность , согласованность , изоляцию , долговечность ( ACID ). тестирование данных на [2]

Синхронная и асинхронная передача сообщений

сообщений Синхронная передача

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

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

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

Асинхронная передача сообщений [ править ]

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

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

Буфер, необходимый для асинхронной связи, может вызвать проблемы, когда он заполнен. Необходимо принять решение, заблокировать отправителя или отказаться от будущих сообщений. Заблокированный отправитель может привести к взаимоблокировке . Если сообщения удаляются, связь перестает быть надежной.

Гибриды [ править ]

Синхронную связь можно построить поверх асинхронной с помощью Synchronizer . Например, α-Synchronizer гарантирует, что отправитель всегда ожидает подтверждающего сообщения от получателя. Отправитель отправляет следующее сообщение только после получения подтверждения. С другой стороны, асинхронная связь также может быть построена поверх синхронной связи. Например, современные микроядра обычно предоставляют только синхронного обмена сообщениями. примитив [ нужна ссылка ] а асинхронный обмен сообщениями может быть реализован поверх него с помощью вспомогательных потоков .

Распределенные объекты [ править ]

Системы передачи сообщений используют либо распределенные, либо локальные объекты. В случае распределенных объектов отправитель и получатель могут находиться на разных компьютерах, работать под управлением разных операционных систем, использовать разные языки программирования и т. д. В этом случае уровень шины заботится о преобразовании данных из одной системы в другую, отправке и получении данных по сети. сеть и т. д. Протокол удаленного вызова процедур (RPC) в Unix был ранним примером этого. При таком типе передачи сообщений отправитель и получатель не обязаны использовать объектно-ориентированное программирование. Системы процедурного языка можно обернуть и рассматривать как крупные детальные объекты, способные отправлять и получать сообщения. [4]

Примерами систем, поддерживающих распределенные объекты, являются: Emerald , ONC RPC , CORBA , Java RMI , DCOM , SOAP , .NET Remoting , CTOS , QNX Neutrino RTOS , OpenBinder и D-Bus . Системы распределенных объектов называются системами «ничего общего», поскольку абстракция передачи сообщений скрывает основные изменения состояния, которые могут использоваться при реализации отправки сообщений.

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

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

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

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

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

Математические модели [ править ]

Известными математическими моделями передачи сообщений являются модель актера и исчисление Пи . [6] [7] С математической точки зрения сообщение — это единственное средство передачи управления объекту. Если объект отвечает на сообщение, у него есть метод для этого сообщения.

Алан Кей утверждал, что передача сообщений более важна, чем объекты в ООП, и что самим объектам часто придают слишком большое значение. Модель программирования живых распределенных объектов основана на этом наблюдении; он использует концепцию распределенного потока данных для характеристики поведения сложной распределенной системы с точки зрения шаблонов сообщений, используя высокоуровневые спецификации функционального стиля. [8]

Примеры [ править ]

См. также [ править ]

Ссылки [ править ]

  1. ^ Гольдберг, Адель; Дэвид Робсон (1989). Smalltalk-80 Язык . Эддисон Уэсли. стр. 5–16. ISBN  0-201-13688-0 .
  2. ^ Орфали, Роберт (1996). Основное руководство по выживанию клиента/сервера . Нью-Йорк: Wiley Computer Publishing. стр. 1–22 . ISBN  0-471-15325-7 .
  3. ^ Орфали, Роберт (1996). Основное руководство по выживанию клиента/сервера . Нью-Йорк: Wiley Computer Publishing. стр. 95–133 . ISBN  0-471-15325-7 .
  4. ^ Орфали, Роберт (1996). Основное руководство по выживанию клиента/сервера . Нью-Йорк: Wiley Computer Publishing. стр. 375–397 . ISBN  0-471-15325-7 .
  5. ^ «Процесс скрытия сообщений» . Сообщение . 13 апреля 2022 г. Проверено 12 апреля 2022 г.
  6. ^ Милнер, Робин (январь 1993 г.). «Элементы взаимодействия: лекция на премию Тьюринга» . Коммуникации АКМ . 36 (1): 78–89. дои : 10.1145/151233.151240 .
  7. ^ Карл Хьюитт; Питер Бишоп; Ричард Штайгер (1973). «Универсальный модульный формализм актеров для искусственного интеллекта». IJCAI. {{cite journal}}: Для цитирования журнала требуется |journal= ( помощь )
  8. ^ Кей, Алан. «Прототипы против классов: Re: Sun's HotSpot» . lists.squeakfoundation.org . Проверено 2 января 2014 г.
  9. ^ «Использование передачи сообщений для передачи данных между потоками — язык программирования Rust» . Rust-lang.org .

Дальнейшее чтение [ править ]

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 8b5b1bcb70f92eceb333074a9810015a__1709487780
URL1:https://arc.ask3.ru/arc/aa/8b/5a/8b5b1bcb70f92eceb333074a9810015a.html
Заголовок, (Title) документа по адресу, URL1:
Message passing - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)