/ˌaɪ piː ˈsiː/

noun … “a set of methods enabling processes to communicate and coordinate with each other.”

IPC, short for inter-process communication, is a fundamental mechanism in operating systems and distributed computing that allows separate processes to exchange data, signals, or messages. It ensures that processes—whether on the same machine or across a network—can coordinate actions, share resources, and maintain consistency without direct access to each other’s memory space. By abstracting communication, IPC enables modular, concurrent, and scalable system designs.

Technically, IPC includes multiple paradigms and mechanisms, each suited to different use cases. Common methods include:

  • Pipes — unidirectional or bidirectional streams for sequential data transfer between related processes.
  • Message Queues — asynchronous messaging systems where processes can send and receive discrete messages reliably.
  • Shared Memory — regions of memory mapped for access by multiple processes, often combined with semaphores or mutexes for synchronization.
  • Sockets — endpoints for sending and receiving data over local or network connections, supporting protocols like TCP or UDP.
  • Signals — lightweight notifications sent to processes to indicate events or trigger handlers.

IPC is often integrated with other system concepts. For example, send and receive operations implement message passing over sockets or queues; async patterns enable non-blocking communication; and acknowledgment ensures reliable data transfer. Its flexibility allows developers to coordinate GPU computation, distribute workloads, and build multi-process applications efficiently.

In practical applications, IPC is used for client-server communication, distributed systems, multi-threaded applications, microservices orchestration, and real-time event-driven software. Proper IPC design balances performance, safety, and complexity, ensuring processes synchronize effectively without introducing race conditions or deadlocks.

An example of IPC using Python’s multiprocessing message queue:

from multiprocessing import Process, Queue

def worker(q):
q.put("Hello from worker")

queue = Queue()
p = Process(target=worker, args=(queue,))
p.start()
message = queue.get()  # receive data from worker process
print(message)
p.join() 

The intuition anchor is that IPC acts like a “conversation system for processes”: it provides structured pathways for processes to exchange data, signals, and messages, enabling collaboration and coordination while preserving isolation and system stability.