Comunicazioni interprocesso

Il sistema operativo Windows fornisce meccanismi per facilitare la comunicazione e la condivisione dei dati tra le applicazioni. Collettivamente, le attività abilitate da questi meccanismi sono chiamate comunicazioni interprocesso (IPC). Alcune forme di IPC facilitano la divisione del lavoro tra diversi processi specializzati. Altre forme di IPC facilitano la divisione del lavoro tra i computer in una rete.

In genere, le applicazioni possono usare IPC categorizzate come client o server. Un client è un'applicazione o un processo che richiede un servizio da un'altra applicazione o processo. Un server è un'applicazione o un processo che risponde a una richiesta client. Molte applicazioni fungono sia da client che da server, a seconda della situazione. Ad esempio, un'applicazione di elaborazione delle parole può fungere da client per richiedere una tabella di riepilogo dei costi di produzione da un'applicazione foglio di calcolo che funge da server. L'applicazione foglio di calcolo, a sua volta, può fungere da client per richiedere i livelli di inventario più recenti da un'applicazione di controllo inventario automatizzato.

Dopo aver deciso che l'applicazione trarrà vantaggio da IPC, è necessario decidere quale dei metodi IPC disponibili usare. È probabile che un'applicazione usi diversi meccanismi IPC. Le risposte a queste domande determinano se un'applicazione può trarre vantaggio usando uno o più meccanismi IPC.

  • L'applicazione deve essere in grado di comunicare con altre applicazioni in esecuzione in altri computer in una rete oppure è sufficiente che l'applicazione comunichi solo con le applicazioni nel computer locale?
  • L'applicazione deve essere in grado di comunicare con le applicazioni in esecuzione in altri computer che potrebbero essere in esecuzione in sistemi operativi diversi (ad esempio Windows o UNIX a 16 bit)?
  • L'utente dell'applicazione deve scegliere le altre applicazioni con cui l'applicazione comunica o può trovare implicitamente i partner che collaborano con l'applicazione?
  • L'applicazione deve comunicare con molte applicazioni diverse in modo generale, ad esempio consentire operazioni taglia e incolla con qualsiasi altra applicazione o se i requisiti di comunicazione devono essere limitati a un set limitato di interazioni con altre applicazioni specifiche?
  • Le prestazioni sono un aspetto critico dell'applicazione? Tutti i meccanismi IPC includono una certa quantità di overhead.
  • L'applicazione deve essere un'applicazione GUI o un'applicazione console? Alcuni meccanismi IPC richiedono un'applicazione GUI.

I meccanismi IPC seguenti sono supportati da Windows:

Uso degli Appunti per IPC

Gli Appunti fungono da deposito centrale per la condivisione dei dati tra le applicazioni. Quando un utente esegue un'operazione di taglio o copia in un'applicazione, l'applicazione inserisce i dati selezionati negli Appunti in uno o più formati standard o definiti dall'applicazione. Qualsiasi altra applicazione può quindi recuperare i dati dagli Appunti, scegliendo tra i formati disponibili che riconosce. Gli Appunti sono un mezzo di scambio ad accoppiamento molto debole, in cui le applicazioni devono accettare solo il formato dei dati. Le applicazioni possono risiedere nello stesso computer o in computer diversi in una rete.

Punto chiave: tutte le applicazioni devono supportare gli Appunti per i formati di dati che conoscono. Ad esempio, un editor di testo o un elaboratore di testo deve essere in grado di produrre e accettare dati degli Appunti in formato testo puro. Per altre informazioni, vedere Appunti.

Uso di COM per IPC

Le applicazioni che usano OLE gestiscono documenti composti, ovvero documenti costituiti da dati di un'ampia gamma di applicazioni diverse. OLE fornisce servizi che semplificano la chiamata delle applicazioni ad altre applicazioni per la modifica dei dati. Ad esempio, un elaboratore di testo che usa OLE potrebbe incorporare un grafico da un foglio di calcolo. L'utente potrebbe avviare automaticamente il foglio di calcolo dall'interno del word processor scegliendo il grafico incorporato per la modifica. OLE si occupa dell'avvio del foglio di calcolo e della presentazione del grafico per la modifica. Quando l'utente chiude il foglio di calcolo, il grafico verrà aggiornato nel documento originale del word processor. Il foglio di calcolo sembra essere un'estensione del word processor.

La base di OLE è il Component Object Model (COM). Un componente software che utilizza COM può comunicare con un'ampia gamma di altri componenti, anche quelli che non sono ancora stati scritti. I componenti interagiscono come oggetti e client. COM distribuito estende il modello di programmazione COM in modo che funzioni in rete.

Punto chiave: OLE supporta documenti composti e consente a un'applicazione di includere dati incorporati o collegati che, quando scelto, avvia automaticamente un'altra applicazione per la modifica dei dati. In questo modo l'applicazione può essere estesa da qualsiasi altra applicazione che usa OLE. Gli oggetti COM forniscono l'accesso ai dati di un oggetto tramite uno o più set di funzioni correlate, note come interfacce. Per altre informazioni, vedere COM e ActiveX Object Services.

Uso della copia dei dati per IPC

La copia dei dati consente a un'applicazione di inviare informazioni a un'altra applicazione usando il messaggio di WM_COPYDATA . Questo metodo richiede la cooperazione tra l'applicazione di invio e l'applicazione ricevente. L'applicazione ricevente deve conoscere il formato delle informazioni e essere in grado di identificare il mittente. L'applicazione di invio non può modificare la memoria a cui fa riferimento alcun puntatore.

Punto chiave: la copia dei dati può essere usata per inviare rapidamente informazioni a un'altra applicazione usando la messaggistica di Windows. Per altre informazioni, vedere Copia dei dati.

Uso di DDE per IPC

DDE è un protocollo che consente alle applicazioni di scambiare dati in un'ampia gamma di formati. Le applicazioni possono usare DDE per scambi di dati monouso o per scambi in corso in cui le applicazioni si aggiornano l'una all'altra man mano che diventano disponibili nuovi dati.

I formati di dati usati da DDE sono gli stessi usati dagli Appunti. DDE può essere considerato come un'estensione del meccanismo degli Appunti. Gli Appunti vengono quasi sempre usati per una risposta una tantum a un comando utente, ad esempio la scelta del comando Incolla da un menu. DDE viene in genere avviato anche da un comando utente, ma spesso continua a funzionare senza ulteriori interazioni dell'utente. È anche possibile definire formati di dati DDE personalizzati per IPC per scopi speciali tra applicazioni con requisiti di comunicazione più strettamente associati.

Gli scambi DDE possono verificarsi tra applicazioni in esecuzione nello stesso computer o in computer diversi in una rete.

Punto chiave: DDE non è così efficiente quanto le tecnologie più recenti. Tuttavia, è comunque possibile usare DDE se altri meccanismi IPC non sono adatti o se è necessario interfacciarsi con un'applicazione esistente che supporta solo DDE. Per altre informazioni, vedere Dynamic Data Exchange e Dynamic Data Exchange Management Library.

Uso di un mapping di file per IPC

Il mapping dei file consente a un processo di trattare il contenuto di un file come se fosse un blocco di memoria nello spazio indirizzi del processo. Il processo può usare semplici operazioni di puntatore per esaminare e modificare il contenuto del file. Quando due o più processi accedono allo stesso mapping di file, ogni processo riceve un puntatore alla memoria nel proprio spazio indirizzi che può usare per leggere o modificare il contenuto del file. I processi devono usare un oggetto di sincronizzazione, ad esempio un semaforo, per evitare il danneggiamento dei dati in un ambiente multitasking.

È possibile usare un caso speciale di mapping dei file per fornire memoria condivisa denominata tra processi. Se si specifica il file di scambio di sistema durante la creazione di un oggetto di mapping di file, l'oggetto di mapping dei file viene considerato come blocco di memoria condivisa. Altri processi possono accedere allo stesso blocco di memoria aprendo lo stesso oggetto di mapping di file.

Il mapping dei file è abbastanza efficiente e fornisce anche attributi di sicurezza supportati dal sistema operativo che consentono di evitare il danneggiamento non autorizzato dei dati. Il mapping dei file può essere usato solo tra processi in un computer locale; non può essere usato in rete.

Punto chiave: il mapping dei file è un modo efficiente per due o più processi nello stesso computer per condividere i dati, ma è necessario fornire la sincronizzazione tra i processi. Per altre informazioni, vedere Mapping e sincronizzazione dei file.

Uso di mailslot per IPC

I mailslot forniscono comunicazioni unidirezionale. Qualsiasi processo che crea un mailslot è un server mailslot. Altri processi, denominati client mailslot, inviano messaggi al server mailslot scrivendo un messaggio nel relativo mailslot. I messaggi in arrivo vengono sempre aggiunti alla mailslot. Mailslot salva i messaggi finché il server mailslot non li ha letti. Un processo può essere sia un server mailslot che un client mailslot, quindi è possibile usare più mailslot.

Un client mailslot può inviare un messaggio a un mailslot nel computer locale, a un mailslot in un altro computer o a tutti i messaggi con lo stesso nome in tutti i computer di un dominio di rete specificato. I messaggi trasmessi a tutti i messaggi di posta elettronica in un dominio non possono essere più di 400 byte, mentre i messaggi inviati a un singolo messaggiolot sono limitati solo dalla dimensione massima del messaggio specificata dal server mailslot al momento della creazione del messaggiolot.

Punto chiave: Mailslots offre un modo semplice per inviare e ricevere messaggi brevi per le applicazioni. Offrono anche la possibilità di trasmettere messaggi in tutti i computer in un dominio di rete. Per altre informazioni, vedere Mailslots.

Uso di pipe per IPC

Esistono due tipi di pipe per la comunicazione bidirezionale: pipe anonime e named pipe. Le pipe anonime consentono ai processi correlati di trasferire le informazioni tra loro. In genere, viene usata una pipe anonima per reindirizzare l'input standard o l'output di un processo figlio in modo che possa scambiare dati con il processo padre. Per scambiare dati in entrambe le direzioni (operazione duplex), è necessario creare due pipe anonime. Il processo padre scrive i dati in una pipe usando il relativo handle di scrittura, mentre il processo figlio legge i dati da tale pipe usando il relativo handle di lettura. Analogamente, il processo figlio scrive i dati nell'altra pipe e il processo padre le legge da esso. Le pipe anonime non possono essere usate in rete, né possono essere usate tra processi non correlati.

Le named pipe vengono usate per trasferire i dati tra processi non correlati e tra processi in computer diversi. In genere, un processo server named pipe crea una named pipe con un nome noto o un nome che deve essere comunicato ai client. Un processo client named-pipe che conosce il nome della pipe può aprire l'altra estremità, soggetto alle restrizioni di accesso specificate dal processo del server named-pipe. Dopo che sia il server che il client sono connessi alla pipe, possono scambiare dati eseguendo operazioni di lettura e scrittura sulla pipe.

Punto chiave: le pipe anonime offrono un modo efficiente per reindirizzare l'input standard o l'output ai processi figlio nello stesso computer. Le named pipe forniscono una semplice interfaccia di programmazione per il trasferimento dei dati tra due processi, indipendentemente dal fatto che si trovino nello stesso computer o in una rete. Per altre informazioni, vedere Pipe.

Uso di RPC per IPC

RPC consente alle applicazioni di chiamare le funzioni in remoto. Pertanto, RPC rende IPC facile come chiamare una funzione. RPC opera tra processi in un singolo computer o in computer diversi in una rete.

La rpc fornita da Windows è conforme a Open Software Foundation (OSF) Distributed Computing Environment (DCE). Ciò significa che le applicazioni che usano RPC sono in grado di comunicare con le applicazioni in esecuzione con altri sistemi operativi che supportano DCE. RPC supporta automaticamente la conversione dei dati per tenere conto di architetture hardware diverse e per l'ordinamento dei byte tra ambienti diversi.

I client e i server RPC sono strettamente associati, ma mantengono comunque prestazioni elevate. Il sistema usa ampiamente RPC per facilitare una relazione client/server tra diverse parti del sistema operativo.

Punto chiave: RPC è un'interfaccia a livello di funzione, con supporto per la conversione automatica dei dati e per le comunicazioni con altri sistemi operativi. Con RPC è possibile creare applicazioni distribuite ad alte prestazioni e strettamente associate. Per altre informazioni, vedere Componenti RPC Microsoft.

Uso di Windows Sockets per IPC

Windows Sockets è un'interfaccia indipendente dal protocollo. Sfrutta le funzionalità di comunicazione dei protocolli sottostanti. In Windows Sockets 2, un handle socket può essere usato facoltativamente come handle di file con le funzioni di I/O dei file standard.

Windows Sockets si basa sui socket diffusi per la prima volta da Berkeley Software Distribution (BSD). Un'applicazione che usa Windows Sockets può comunicare con altre implementazioni socket in altri tipi di sistemi. Tuttavia, non tutti i provider di servizi di trasporto supportano tutte le opzioni disponibili.

Punto chiave: Windows Sockets è un'interfaccia indipendente dal protocollo in grado di supportare le funzionalità di rete correnti ed emergenti. Per altre informazioni, vedere Windows Sockets 2.

Funzione socket unix (AF_UNIX) in Windows

A partire da Windows Insider Build 17063, puoi usare la famiglia di indirizzi unix socket (AF_UNIX) in Windows per comunicare tra processi Win32. I socket Unix consentono la comunicazione tra processi (IPC) nello stesso computer. Per altre info, vedi il post di blog AF_UNIX arriva a Windows.

Deprecazione del protocollo Remote Mailslot

A partire da Windows 11 Insider Preview Build 25314 e Windows Server Preview Build 25314, abbiamo iniziato a disabilitare il protocollo Remote Mailslot per impostazione predefinita. Questo è un precursore della deprecazione e della rimozione finale da Windows. Per altre info, vedi il post di blog L'inizio della fine di Remote Mailslots come parte di Windows Insider.