Partilhar via


Comunicações entre processos

O sistema operacional Windows fornece mecanismos para facilitar as comunicações e o compartilhamento de dados entre aplicativos. Coletivamente, as atividades possibilitadas por esses mecanismos são chamadas de de Comunicação Interprocessual (IPC). Algumas formas de IPC facilitam a divisão do trabalho entre vários processos especializados. Outras formas de IPC facilitam a divisão do trabalho entre computadores em rede.

Normalmente, os aplicativos podem usar IPC categorizados como clientes ou servidores. Um cliente é um aplicativo ou um processo que solicita um serviço de algum outro aplicativo ou processo. Um servidor é um aplicativo ou um processo que responde a uma solicitação do cliente. Muitos aplicativos atuam como um cliente e um servidor, dependendo da situação. Por exemplo, um aplicativo de processamento de texto pode atuar como um cliente ao solicitar uma tabela resumida de custos de fabricação de um aplicativo de planilha atuando como um servidor. O aplicativo de planilha, por sua vez, pode atuar como um cliente na solicitação dos níveis de estoque mais recentes de um aplicativo de controle de estoque automatizado.

Depois de decidir que seu aplicativo se beneficiaria do IPC, você deve decidir qual dos métodos IPC disponíveis usar. É provável que uma aplicação utilize vários mecanismos IPC. As respostas a essas perguntas determinam se um aplicativo pode se beneficiar usando um ou mais mecanismos de IPC.

  • O aplicativo deve ser capaz de se comunicar com outros aplicativos em execução em outros computadores em uma rede, ou é suficiente para o aplicativo se comunicar apenas com aplicativos no computador local?
  • O aplicativo deve ser capaz de se comunicar com aplicativos em execução em outros computadores que podem estar sendo executados em sistemas operacionais diferentes (como Windows de 16 bits ou UNIX)?
  • O utilizador da aplicação deve ter de escolher as outras aplicações com as quais a aplicação comunica ou pode a aplicação encontrar implicitamente os seus parceiros cooperantes?
  • O aplicativo deve se comunicar com muitos aplicativos diferentes de uma maneira geral, como permitir operações de cortar e colar com qualquer outro aplicativo, ou seus requisitos de comunicação devem ser limitados a um conjunto restrito de interações com outros aplicativos específicos?
  • O desempenho é um aspeto crítico do aplicativo? Todos os mecanismos do IPC incluem alguma quantidade de despesas gerais.
  • O aplicativo deve ser um aplicativo GUI ou um aplicativo de console? Alguns mecanismos IPC requerem uma aplicação GUI.

Os seguintes mecanismos IPC são suportados pelo Windows:

Usando a área de transferência para IPC

A área de transferência funciona como um depositário central para o compartilhamento de dados entre aplicativos. Quando um usuário executa uma operação de corte ou cópia em um aplicativo, o aplicativo coloca os dados selecionados na área de transferência em um ou mais formatos padrão ou definidos pelo aplicativo. Qualquer outro aplicativo pode então recuperar os dados da área de transferência, escolhendo entre os formatos disponíveis que ele entende. A área de transferência é um meio de troca de acoplamento muito flexível, onde os aplicativos só precisam concordar com o formato de dados. Os aplicativos podem residir no mesmo computador ou em computadores diferentes em uma rede.

Ponto-chave: Todos os aplicativos devem suportar a área de transferência para os formatos de dados que eles entendem. Por exemplo, um editor de texto ou processador de texto deve pelo menos ser capaz de produzir e aceitar dados da área de transferência em formato de texto puro. Para obter mais informações, consulte Área de transferência.

Usando COM para IPC

Os aplicativos que usam OLE gerenciam documentos compostos— ou seja, documentos compostos por dados de uma variedade de aplicativos diferentes. O OLE fornece serviços que facilitam que os aplicativos chamem outros aplicativos para edição de dados. Por exemplo, um processador de texto que usa OLE pode incorporar um gráfico de uma planilha. O usuário pode iniciar a planilha automaticamente a partir do processador de texto, escolhendo o gráfico incorporado para edição. OLE se encarrega de iniciar a planilha e apresentar o gráfico para edição. Quando o usuário encerra a planilha, o gráfico é atualizado no documento original do processador de texto. A folha de cálculo parece ser uma extensão do processador de texto.

A base do OLE é o modelo de objeto componente (COM). Um componente de software que usa COM pode se comunicar com uma grande variedade de outros componentes, mesmo aqueles que ainda não foram escritos. Os componentes interagem como objetos e clientes. O COM distribuído estende o modelo de programação COM para que ele funcione em uma rede.

Ponto chave: OLE suporta documentos compostos e permite que um aplicativo inclua dados incorporados ou vinculados que, quando escolhidos, iniciam automaticamente outro aplicativo para edição de dados. Isso permite que o aplicativo seja estendido por qualquer outro aplicativo que use OLE. Os objetos COM fornecem acesso aos dados de um objeto por meio de um ou mais conjuntos de funções relacionadas, conhecidas como interfaces . Para obter mais informações, consulte COM e ActiveX Object Services.

Usando cópia de dados para IPC

A cópia de dados permite que um aplicativo envie informações para outro aplicativo usando a mensagem WM_COPYDATA. Este método requer a cooperação entre o pedido de envio e o pedido de receção. O pedido de receção deve conhecer o formato das informações e ser capaz de identificar o remetente. O aplicativo de envio não pode modificar a memória referenciada por nenhum ponteiro.

Ponto chave: A cópia de dados pode ser usada para enviar informações rapidamente para outro aplicativo usando mensagens do Windows. Para obter mais informações, consulte Data Copy.

Usando DDE para IPC

DDE é um protocolo que permite que os aplicativos troquem dados em uma variedade de formatos. Os aplicativos podem usar o DDE para trocas de dados únicas ou para intercâmbios contínuos nos quais os aplicativos se atualizam uns aos outros à medida que novos dados ficam disponíveis.

Os formatos de dados utilizados pelo DDE são os mesmos utilizados pela área de transferência. O DDE pode ser pensado como uma extensão do mecanismo da área de transferência. A área de transferência é quase sempre usada para uma resposta única a um comando do usuário, como escolher o comando Colar em um menu. O DDE também é geralmente iniciado por um comando do usuário, mas muitas vezes continua a funcionar sem mais interação do usuário. Você também pode definir formatos de dados DDE personalizados para IPC de finalidade especial entre aplicativos com requisitos de comunicação mais rígidos.

As trocas DDE podem ocorrer entre aplicativos executados no mesmo computador ou em computadores diferentes em uma rede.

Ponto-chave: DDE não é tão eficiente quanto as tecnologias mais recentes. No entanto, você ainda pode usar DDE se outros mecanismos IPC não forem adequados ou se você precisar interagir com um aplicativo existente que suporte apenas DDE. Para obter mais informações, consulte Dynamic Data Exchange e Dynamic Data Exchange Management Library.

Usando um mapeamento de arquivo para IPC

de mapeamento de arquivos permite que um processo trate o conteúdo de um arquivo como se fosse um bloco de memória no espaço de endereçamento do processo. O processo pode usar operações de ponteiro simples para examinar e modificar o conteúdo do arquivo. Quando dois ou mais processos acessam o mesmo mapeamento de arquivo, cada processo recebe um ponteiro para a memória em seu próprio espaço de endereço que pode ser usado para ler ou modificar o conteúdo do arquivo. Os processos devem usar um objeto de sincronização, como um semáforo, para evitar corrupção de dados em um ambiente multitarefa.

Você pode usar um caso especial de mapeamento de arquivos para fornecer de memória compartilhada nomeada entre processos. Se você especificar o arquivo de troca do sistema ao criar um objeto de mapeamento de arquivo, o objeto de mapeamento de arquivo será tratado como um bloco de memória compartilhada. Outros processos podem acessar o mesmo bloco de memória abrindo o mesmo objeto de mapeamento de arquivo.

O mapeamento de arquivos é bastante eficiente e também fornece atributos de segurança suportados pelo sistema operacional que podem ajudar a evitar corrupção de dados não autorizada. O mapeamento de arquivos pode ser usado apenas entre processos em um computador local; não pode ser utilizado através de uma rede.

Ponto-chave: O mapeamento de arquivos é uma maneira eficiente para dois ou mais processos no mesmo computador compartilharem dados, mas você deve fornecer sincronização entre os processos. Para obter mais informações, consulte de mapeamento de arquivos e de sincronização.

Usando um Mailslot para IPC

Mailslots fornecem comunicação unidirecional. Qualquer processo que crie um mailslot é um servidor de mailslot . Outros processos, chamados clientes mailslot, enviam mensagens para o servidor mailslot escrevendo uma mensagem para o seu mailslot. As mensagens recebidas são sempre anexadas ao mailslot. O mailslot salva as mensagens até que o servidor mailslot as tenha lido. Um processo pode ser tanto um servidor mailslot quanto um cliente mailslot, portanto, a comunicação bidirecional é possível usando vários mailslots.

Um cliente mailslot pode enviar uma mensagem para um mailslot em seu computador local, para um mailslot em outro computador ou para todos os mailslots com o mesmo nome em todos os computadores em um domínio de rede especificado. As mensagens transmitidas para todos os mailslots em um domínio não podem ter mais de 400 bytes, enquanto as mensagens enviadas para um único mailslot são limitadas apenas pelo tamanho máximo de mensagem especificado pelo servidor mailslot quando criou o mailslot.

Ponto-chave: Mailslots oferecem uma maneira fácil para os aplicativos enviarem e receberem mensagens curtas. Eles também fornecem a capacidade de transmitir mensagens em todos os computadores em um domínio de rede. Para obter mais informações, consulte Mailslots.

Usando tubos para IPC

Existem dois tipos de tubos para comunicação bidirecional: tubos anónimos e tubos nomeados. pipes anônimos permitir que processos relacionados transfiram informações entre si. Normalmente, um pipe anônimo é usado para redirecionar a entrada ou saída padrão de um processo filho para que ele possa trocar dados com seu processo pai. Para trocar dados em ambas as direções (operação duplex), você deve criar dois pipes anônimos. O processo pai grava dados em um pipe usando sua alça de gravação, enquanto o processo filho lê os dados desse pipe usando sua alça de leitura. Da mesma forma, o processo filho grava dados no outro pipe e o processo pai lê a partir dele. Os pipes anónimos não podem ser utilizados através de uma rede, nem podem ser utilizados entre processos não relacionados.

Os de pipes nomeados são usados para transferir dados entre processos que não estão relacionados e entre processos em computadores diferentes. Normalmente, um processo de servidor de pipe nomeado cria um pipe nomeado com um nome conhecido ou um nome que deve ser comunicado aos seus clientes. Um processo de cliente de pipe nomeado que sabe o nome do pipe pode abrir sua outra extremidade, sujeito a restrições de acesso especificadas pelo processo de servidor de pipe nomeado. Depois que o servidor e o cliente se conectam ao pipe, eles podem trocar dados executando operações de leitura e gravação no pipe.

Ponto-chave: Os pipes anônimos fornecem uma maneira eficiente de redirecionar a entrada ou saída padrão para processos filho no mesmo computador. Os pipes nomeados fornecem uma interface de programação simples para transferir dados entre dois processos, quer residam no mesmo computador ou através de uma rede. Para obter mais informações, consulte Pipes.

Usando RPC para IPC

O RPC permite que os aplicativos chamem funções remotamente. Portanto, o RPC torna o IPC tão fácil quanto chamar uma função. O RPC opera entre processos em um único computador ou em computadores diferentes em uma rede.

O RPC fornecido pelo Windows é compatível com o Ambiente de Computação Distribuída (DCE) da Open Software Foundation (OSF). Isso significa que os aplicativos que usam RPC são capazes de se comunicar com aplicativos executados com outros sistemas operacionais que suportam DCE. O RPC suporta automaticamente a conversão de dados para levar em conta diferentes arquiteturas de hardware e para ordenação de bytes entre ambientes diferentes.

Os clientes e servidores RPC estão fortemente acoplados, mas ainda mantêm alto desempenho. O sistema faz uso extensivo de RPC para facilitar uma relação cliente/servidor entre diferentes partes do sistema operacional.

Ponto chave: RPC é uma interface de nível de função, com suporte para conversão automática de dados e para comunicações com outros sistemas operacionais. Usando RPC, você pode criar aplicativos distribuídos de alto desempenho e firmemente acoplados. Para obter mais informações, consulte Microsoft RPC Components.

Usando o Windows Sockets para IPC

O Windows Sockets é uma interface independente de protocolo. Tira partido das capacidades de comunicação dos protocolos subjacentes. No Windows Sockets 2, um identificador de soquete pode opcionalmente ser usado como um identificador de arquivo com as funções de E/S de arquivo padrão.

Os Windows Sockets são baseados nos soquetes popularizados pela Berkeley Software Distribution (BSD). Um aplicativo que usa Windows Sockets pode se comunicar com outra implementação de soquete em outros tipos de sistemas. No entanto, nem todos os prestadores de serviços de transporte suportam todas as opções disponíveis.

Ponto chave: Windows Sockets é uma interface independente de protocolo capaz de suportar recursos de rede atuais e emergentes. Para obter mais informações, consulte Windows Sockets 2.

A função de soquete unix (AF_UNIX) no Windows

A partir do Windows Insider Build 17063, você pode usar a família de endereços de soquete unix (AF_UNIX) no Windows para se comunicar entre processos Win32. Os soquetes Unix permitem a comunicação entre processos (IPC) entre processos na mesma máquina. Para obter mais informações, consulte a postagem de blog AF_UNIX chega ao Windows.

A substituição do protocolo Mailslot remoto

A partir do Windows 11 Insider Preview Build 25314 e do Windows Server Preview Build 25314, começamos a desativar o protocolo Mailslot remoto por padrão. Este é um precursor da depreciação e eventual remoção do Windows. Para obter mais informações, consulte a postagem de blog O início do fim dos Mailslots Remotos como parte do Windows Insider.