Взаимодействие между процессами

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

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

После принятия решения о том, что ваше приложение будет использовать IPC, необходимо решить, какие из доступных методов IPC следует использовать. Скорее всего, приложение будет использовать несколько механизмов IPC. Ответы на эти вопросы определяют, может ли приложение воспользоваться одним или несколькими механизмами IPC.

  • Должно ли приложение взаимодействовать с другими приложениями, работающими на других компьютерах в сети, или достаточно для взаимодействия приложения только с приложениями на локальном компьютере?
  • Должно ли приложение взаимодействовать с приложениями, работающими на других компьютерах, которые могут работать в разных операционных системах (например, 16-разрядной ос Windows или UNIX)?
  • Должен ли пользователь приложения выбрать другие приложения, с которыми взаимодействует приложение, или неявно найти своих партнеров?
  • Должно ли приложение взаимодействовать с различными приложениями в целом, например разрешать операции вырезания и вставки с любым другим приложением или должны ли его требования к обмену данными ограничены ограниченным набором взаимодействий с конкретными другими приложениями?
  • Является ли производительность критически важным аспектом приложения? Все механизмы IPC включают некоторые затраты.
  • Должно ли приложение быть приложением GUI или консольным приложением? Для некоторых механизмов IPC требуется приложение графического интерфейса.

Следующие механизмы IPC поддерживаются Windows:

Использование буфера обмена для IPC

Буфер обмена выступает в качестве центрального депозита для обмена данными между приложениями. Когда пользователь выполняет операцию выреза или копирования в приложении, приложение помещает выбранные данные в буфер обмена в один или несколько стандартных или определяемых приложением форматов. Затем любое другое приложение может получить данные из буфера обмена, выбрав из доступных форматов, которые он понимает. Буфер обмена — это очень слабо связанная среда обмена, где приложениям нужно только согласиться с форматом данных. Приложения могут находиться на одном компьютере или на разных компьютерах в сети.

Ключевая точка. Все приложения должны поддерживать буфер обмена для этих форматов данных, которые они понимают. Например, текстовый редактор или обработчик слов должен по крайней мере иметь возможность создавать и принимать данные буфера обмена в чистом текстовом формате. Дополнительные сведения см. в разделе "Буфер обмена".

Использование COM для IPC

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

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

Ключевая точка: OLE поддерживает составные документы и позволяет приложению включать внедренные или связанные данные, которые при выборе автоматически запускают другое приложение для редактирования данных. Это позволяет приложению расширяться любым другим приложением, использующим OLE. COM-объекты предоставляют доступ к данным объекта через один или несколько наборов связанных функций, известных как интерфейсы. Дополнительные сведения см. в службах объектов COM и ActiveX.

Использование копирования данных для IPC

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

Ключевая точка: копирование данных можно использовать для быстрого отправки информации другому приложению с помощью обмена сообщениями Windows. Дополнительные сведения см. в разделе "Копирование данных".

Использование DDE для IPC

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

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

ОбменЫ DDE могут происходить между приложениями, работающими на одном компьютере или на разных компьютерах в сети.

Ключевая точка: DDE не так эффективно, как новые технологии. Однако вы по-прежнему можете использовать DDE, если другие механизмы IPC не подходят или если необходимо интерфейс с существующим приложением, поддерживающим только DDE. Дополнительные сведения см. в разделе "Динамический обмен данными" и "Библиотека управления динамическими данными Exchange".

Использование сопоставления файлов для IPC

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

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

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

Ключевой момент: сопоставление файлов — это эффективный способ для двух или нескольких процессов на одном компьютере для совместного использования данных, но необходимо обеспечить синхронизацию между процессами. Дополнительные сведения см. в разделе "Сопоставление файлов" и "Синхронизация".

Использование Mailslot для IPC

Mailslots обеспечивает односторонняя связь. Любой процесс, создающий mailslot, является сервером mailslot. Другие процессы, называемые клиентами mailslot, отправляют сообщения на сервер mailslot, записывая сообщение в mailslot. Входящие сообщения всегда добавляются в mailslot. Mailslot сохраняет сообщения до тех пор, пока сервер mailslot не считывает их. Процесс может быть как сервером mailslot, так и клиентом mailslot, поэтому двустороннее взаимодействие возможно с помощью нескольких почтовых слоток.

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

Ключевая точка: Mailslots предлагает простой способ отправки и получения коротких сообщений приложениями. Они также предоставляют возможность транслировать сообщения на всех компьютерах в сетевом домене. Дополнительные сведения см. в разделе Mailslots.

Использование каналов для IPC

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

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

Ключевая точка. Анонимные каналы обеспечивают эффективный способ перенаправления стандартных входных или выходных данных дочерним процессам на одном компьютере. Именованные каналы предоставляют простой интерфейс программирования для передачи данных между двумя процессами, будь то они находятся на одном компьютере или по сети. Дополнительные сведения см. в разделе "Каналы".

Использование RPC для IPC

RPC позволяет приложениям удаленно вызывать функции. Поэтому RPC упрощает вызов функции IPC. RPC работает между процессами на одном компьютере или на разных компьютерах в сети.

RPC, предоставляемый Windows, соответствует среде распределенных вычислений Open Software Foundation (OSF) (DCE). Это означает, что приложения, использующие RPC, могут взаимодействовать с приложениями, работающими с другими операционными системами, поддерживающими DCE. RPC автоматически поддерживает преобразование данных в учетную запись различных аппаратных архитектур и порядок байтов между различными средами.

Клиенты и серверы RPC тесно связаны, но по-прежнему поддерживают высокую производительность. Система использует RPC для упрощения связи клиента и сервера между различными частями операционной системы.

Ключевой момент: RPC — это интерфейс уровня функции, поддерживающий автоматическое преобразование данных и взаимодействие с другими операционными системами. С помощью RPC можно создавать высокопроизводительные распределенные приложения, тесно связанные. Дополнительные сведения см. в разделе "Компоненты Microsoft RPC".

Использование сокетов Windows для IPC

Сокеты Windows — это независимый от протокола интерфейс. Он использует преимущества возможностей обмена данными базовых протоколов. В сокетах Windows 2 дескриптор сокета можно использовать в качестве дескриптора файлов со стандартными функциями ввода-вывода файлов.

Сокеты Windows основаны на сокетах, впервые популярных в Berkeley Software Distribution (BSD). Приложение, использующее сокеты Windows, может взаимодействовать с другой реализацией сокетов в других типах систем. Однако не все поставщики услуг транспорта поддерживают все доступные варианты.

Ключевая точка: сокеты Windows — это независимый от протокола интерфейс, поддерживающий текущие и новые возможности сети. Дополнительные сведения см. в разделе "Сокеты Windows 2".

Функция сокета UNIX (AF_UNIX) в Windows

Начиная с сборки предварительной оценки Windows 17063, можно использовать семейство адресов сокета UNIX (AF_UNIX) в Windows для обмена данными между процессами Win32. Сокеты Unix позволяют взаимодействовать между процессами на одном компьютере. Дополнительные сведения см. в записи блога AF_UNIX в Windows.

Прекращение использования протокола Remote Mailslot

По состоянию на сборку Предварительной версии предварительной оценки Windows 11 версии 25314 и Windows Server Preview 25314 мы начали отключение протокола Remote Mailslot по умолчанию. Это предшественник для отмены и окончательного удаления из Windows. Дополнительные сведения см. в записи блога о начале окончания удаленных почтовых объектов в рамках программы предварительной оценки Windows.