Comunicações entre processos
O sistema operacional Windows fornece mecanismos para facilitar a comunicação e o compartilhamento de dados entre aplicativos. Coletivamente, as atividades habilitadas por esses mecanismos são chamadas de comunicações entre processos (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 uma rede.
Normalmente, os aplicativos podem usar IPC categorizado 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 de cliente. Muitos aplicativos atuam como um cliente e um servidor, dependendo da situação. Por exemplo, um aplicativo de processamento de palavras pode atuar como um cliente na solicitação de 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 inventário mais recentes de um aplicativo de controle de inventário automatizado.
Depois de decidir que seu aplicativo se beneficiaria do IPC, você deve decidir quais dos métodos de IPC disponíveis usar. É provável que um aplicativo use vários mecanismos de 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 que o aplicativo se comunique 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 em execução em sistemas operacionais diferentes (como Windows de 16 bits ou UNIX)?
- O usuário do aplicativo deve escolher os outros aplicativos com os quais o aplicativo se comunica ou o aplicativo pode encontrar implicitamente seus parceiros que cooperam?
- O aplicativo deve se comunicar com muitos aplicativos diferentes de maneira geral, como permitir operações de recortar 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 aspecto crítico do aplicativo? Todos os mecanismos de IPC incluem alguma quantidade de sobrecarga.
- O aplicativo deve ser um aplicativo gui ou um aplicativo de console? Alguns mecanismos de IPC exigem um aplicativo de GUI.
Os seguintes mecanismos de IPC são compatíveis com o Windows:
- de área de transferência
- com
- de Cópia de Dados
- DDE
- de Mapeamento de Arquivos
- de Emailslots
- Pipes
- RPC
- de Soquetes do Windows
Usando a área de transferência para IPC
A área de transferência atua como um depositário central para o compartilhamento de dados entre aplicativos. Quando um usuário executa uma operação de recortar ou copiar 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 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 muito flexível, em que 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 dar suporte à área de transferência para os formatos de dados que eles entendem. Por exemplo, um editor de texto ou processador de palavras deve pelo menos ser capaz de produzir e aceitar dados de área de transferência em formato de texto puro. Para obter mais informações, consulte da Área de Transferência.
Usando COM para IPC
Os aplicativos que usam o OLE gerenciam documentos compostos— ou seja, documentos compostos de dados de uma variedade de aplicativos diferentes. O OLE fornece serviços que facilitam a chamada de aplicativos em outros aplicativos para edição de dados. Por exemplo, um processador de palavras que usa OLE pode inserir um grafo de uma planilha. O usuário pode iniciar a planilha automaticamente de dentro do processador de palavras escolhendo o gráfico inserido para edição. O OLE cuida de iniciar a planilha e apresentar o grafo para edição. Quando o usuário sair da planilha, o grafo será atualizado no documento original do processador de palavras. A planilha parece ser uma extensão do processador de palavras.
A base do OLE é o COM (Component Object Model). Um componente de software que usa COM pode se comunicar com uma ampla variedade de outros componentes, mesmo aqueles que ainda não foram gravados. 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 dá suporte a documentos compostos e permite que um aplicativo inclua dados inseridos 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 o OLE. Os objetos COM fornecem acesso aos dados de um objeto por meio de um ou mais conjuntos de funções relacionadas, conhecidos como interfaces . Para obter mais informações, consulte COM e ActiveX Object Services.
Usando a 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. Esse método requer cooperação entre o aplicativo de envio e o aplicativo receptor. O aplicativo receptor deve saber 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 ponteiros.
Ponto-chave: Cópia de dados pode ser usada para enviar rapidamente informações para outro aplicativo usando mensagens do Windows. Para obter mais informações, consulte Data Copy.
Usando o DDE para IPC
O 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 únicos ou para trocas contínuas nas quais os aplicativos se atualizam conforme novos dados ficam disponíveis.
Os formatos de dados usados pelo DDE são os mesmos usados pela área de transferência. O DDE pode ser considerado como uma extensão do mecanismo de área de transferência. A área de transferência é quase sempre usada para uma resposta única a um comando de usuário, como escolher o comando Colar em um menu. O DDE também geralmente é iniciado por um comando de usuário, mas geralmente continua funcionando sem interação adicional 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 firmemente acoplados.
As trocas de DDE podem ocorrer entre aplicativos em execução 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 poderá usar o DDE se outros mecanismos IPC não forem adequados ou se precisarem fazer interface com um aplicativo existente que dê suporte apenas ao DDE. Para obter mais informações, consulte do Dynamic Data Exchange e dynamic Data Exchange Management Library .
Usando um mapeamento de arquivo para IPC
mapeamento de arquivo permite que um processo trate o conteúdo de um arquivo como se fossem um bloco de memória no espaço de endereço 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 ele pode usar para ler ou modificar o conteúdo do arquivo. Os processos devem usar um objeto de sincronização, como um semáforo, para evitar a corrupção de dados em um ambiente multitarefa.
Você pode usar um caso especial de mapeamento de arquivo para fornecer memória compartilhada nomeada entre processos. Se você especificar o arquivo de troca de sistema ao criar um objeto de mapeamento de arquivo, o objeto de mapeamento de arquivo será tratado como um bloco de memória compartilhado. 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 compatíveis com o sistema operacional que podem ajudar a evitar a corrupção de dados não autorizados. O mapeamento de arquivos só pode ser usado entre processos em um computador local; ele não pode ser usado em uma rede.
Ponto-chave: Mapeamento de arquivos é uma maneira eficiente para que dois ou mais processos no mesmo computador compartilhem 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 Emaillot para IPC
Os emailslots fornecem comunicação unidirecional. Qualquer processo que cria um emaillot é um servidor de emaillot. Outros processos, chamados clientes de emaillot, enviam mensagens para o servidor de emaillot escrevendo uma mensagem para seu emaillot. As mensagens de entrada são sempre acrescentadas ao emaillot. O emaillot salva as mensagens até que o servidor de emaillot as tenha lido. Um processo pode ser um servidor de emaillot e um cliente de emaillot, portanto, a comunicação bidirecional é possível usando vários emailslots.
Um cliente de emaillot pode enviar uma mensagem para um emaillot em seu computador local, para um emaillot em outro computador ou para todos os emailslots com o mesmo nome em todos os computadores em um domínio de rede especificado. As mensagens transmitidas para todos os emailslots em um domínio não podem ter mais de 400 bytes, enquanto as mensagens enviadas a um único emaillot são limitadas apenas pelo tamanho máximo da mensagem especificado pelo servidor de emaillot quando ele criou o emaillot.
Ponto-chave: Emailslots 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 Emailslots.
Usando pipes para IPC
Há dois tipos de pipes para comunicação bidirecional: pipes anônimos e pipes nomeados. pipes anônimos habilitar processos relacionados para transferir informações uns para os outros. 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 seu identificador de gravação, enquanto o processo filho lê os dados desse pipe usando seu identificador de leitura. Da mesma forma, o processo filho grava dados no outro pipe e o processo pai lê dele. Pipes anônimos não podem ser usados em uma rede, nem podem ser usados entre processos não relacionados.
pipes nomeados são usados para transferir dados entre processos que não são processos 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 conectarem ao pipe, eles poderão trocar dados executando operações de leitura e gravação no pipe.
Ponto-chave: pipes anônimos fornecem uma maneira eficiente de redirecionar 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, independentemente de residirem no mesmo computador ou em uma rede. Para obter mais informações, consulte Pipes.
Usando o 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 está em conformidade com o DCE (Ambiente de Computação Distribuída) do OSF (Open Software Foundation). Isso significa que os aplicativos que usam RPC são capazes de se comunicar com aplicativos em execução com outros sistemas operacionais que dão suporte ao DCE. O RPC dá suporte automaticamente à conversão de dados para considerar diferentes arquiteturas de hardware e para ordenação de bytes entre ambientes diferentes.
Os clientes e servidores RPC estão firmemente acoplados, mas ainda mantêm um alto desempenho. O sistema faz uso extensivo do 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 o RPC, você pode criar aplicativos distribuídos de alto desempenho e bem acoplados. Para obter mais informações, consulte Microsoft RPC Components.
Usando soquetes do Windows para IPC
O Windows Sockets é uma interface independente de protocolo. Ele aproveita os recursos de comunicação dos protocolos subjacentes. No Windows Sockets 2, opcionalmente, um identificador de soquete pode ser usado como um identificador de arquivo com as funções de E/S de arquivo padrão.
Os Soquetes do Windows são baseados nos soquetes populares pela primeira vez pelo Berkeley Software Distribution (BSD). Um aplicativo que usa soquetes do Windows pode se comunicar com outra implementação de soquete em outros tipos de sistemas. No entanto, nem todos os provedores de serviços de transporte dão suporte a todas as opções disponíveis.
Ponto-chave: o Windows Sockets é uma interface independente de protocolo capaz de dar suporte a 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 os processos do Win32. Os soquetes Unix permitem a IPC (comunicação entre processos) entre processos no mesmo computador. Para obter mais informações, consulte a postagem no blog AF_UNIX chega ao Windows.
A substituição do protocolo Emaillot Remoto
A partir do Windows 11 Insider Preview Build 25314 e do Windows Server Preview Build 25314, começamos a desabilitar o protocolo Remote Maillot por padrão. Este é um precursor para a substituição e eventual remoção do Windows. Para obter mais informações, consulte a postagem no blog O início do fim dos Emailslots Remotos como parte do Windows Insider.