Что такое IPC (межпроцессное взаимодействие)?

Современные операционные системы запускают множество процессов одновременно.
Но часто им нужно общаться друг с другом — обмениваться данными, сигналами или координировать работу.

Для этого существует IPC (Inter-Process Communication, межпроцессное взаимодействие).
Это набор механизмов, позволяющих процессам безопасно передавать информацию.


Зачем нужен IPC?

  • Для обмена данными (например, процесс рендера в браузере отправляет результат UI-процессу).
  • Для синхронизации (родительский процесс ждёт завершения дочернего).
  • Для событий/сигналов (одна служба уведомляет другую о новых данных).

Без IPC процессы существовали бы в полной изоляции.


Основные методы IPC

  1. Каналы (pipes)

    • Однонаправленный канал между процессами.
    • Пример: ls | grep "txt" в shell.
  2. Очереди сообщений

    • Процессы пишут и читают из очереди.
    • Удобно для асинхронного обмена.
  3. Разделяемая память

    • Самый быстрый способ — несколько процессов используют один участок памяти.
    • Требуется синхронизация (мьютексы, семафоры).
  4. Сокеты

    • Работают как локально, так и по сети.
    • Пример: клиент-серверные приложения.
  5. Сигналы

    • Простые уведомления (например, kill -9 <pid>).

Пример на Python: Pipe

from multiprocessing import Pipe, Process

def worker(conn):
    conn.send("Привет от дочернего процесса")
    conn.close()

if __name__ == "__main__":
    parent_conn, child_conn = Pipe()
    p = Process(target=worker, args=(child_conn,))
    p.start()
    print(parent_conn.recv())  # Вывод: Привет от дочернего процесса
    p.join()

Итог

  • IPC = межпроцессное взаимодействие.
  • Нужен для обмена данными и координации работы процессов.
  • Основные методы: каналы, очереди, разделяемая память, сокеты, сигналы.