User:Spirited91/sandbox

In Computer science, inter-process communication (IPC) is the activity of sharing data across multiple and commonly specialized processes using communication protocols. Typically, applications using IPC are categorized as clients and servers, where the client requests data and the server responds to client requests. Many applications are both clients and servers, as commonly seen in distributed computing. Methods for achieving IPC are divided into categories which vary based on software requirements, such as performance and modularity requirements, and system circumstances, such as network bandwidth and latency.

There are several reasons for implementing inter-process communication systems:
 * Sharing information. For example, web servers use IPC to share web documents and media with users through a web browser.
 * Distributing labor across systems. For example, Wikipedia uses multiple servers that communicate with one another using IPC to process user requests.
 * Privilege separation. For example, HMI software systems are separated into layers based on privileges to minimize the risk of attacks. These layers communicate with one another using encrypted IPC.

Implementations
There are several mechanisms which may be used for IPC, including the following:


 * Anonymous pipes and named pipes
 * Unix domain sockets
 * 9P
 * Common Object Request Broker Architecture (CORBA)
 * D-Bus
 * Distributed Computing Environment (DCE)
 * Message Bus (Mbus) (specified in RFC 3259)
 * MCAPI Multicore Communications API
 * Lightweight Communications and Marshalling (LCM)
 * ONC RPC
 * XML XML-RPC or SOAP
 * JSON JSON-RPC
 * Thrift
 * TIPC
 * ZeroC's Internet Communications Engine (ICE)
 * ØMQ

The following are platform or programming language specific APIs:


 * Apple Computer's Apple events (previously known as Interapplication Communications (IAC)).
 * Enea's LINX for Linux (open source) and various DSP and general purpose processors under OSE
 * IPC implementation from CMU.
 * Java's Remote Method Invocation (RMI)
 * KDE's Desktop Communications Protocol (DCOP) - Now deprecated. D-Bus is used instead.
 * Libt2n for C++ under Linux only, handles complex objects and exceptions
 * The Mach kernel's Mach Ports
 * Microsoft's ActiveX, Component Object Model (COM), Microsoft Transaction Server (COM+), Distributed Component Object Model (DCOM), Dynamic Data Exchange (DDE), Object Linking and Embedding (OLE), anonymous pipes, named pipes, Local Procedure Call, MailSlots, Message loop, MSRPC, .NET Remoting, and Windows Communication Foundation (WCF)
 * Novell's SPX
 * PHP's sessions
 * POSIX mmap, message queues, semaphores, and shared memory
 * RISC OS's messages
 * Solaris Doors
 * System V's message queues, semaphores, and shared memory
 * Distributed Ruby
 * OpenBinder Open binder
 * IPC Shared Memory Messaging from Solace Systems
 * QNX's PPS (Persistant Publish/Subscribe) service
 * SIMPL The Synchronous Interprocess Messaging Project for Linux (SIMPL)