Что такое IPC (межпроцессное взаимодействие)?
Современные операционные системы запускают множество процессов одновременно.
Но часто им нужно общаться друг с другом — обмениваться данными, сигналами или координировать работу.
Для этого существует IPC (Inter-Process Communication, межпроцессное взаимодействие).
Это набор механизмов, позволяющих процессам безопасно передавать информацию.
Зачем нужен IPC?
- Для обмена данными (например, процесс рендера в браузере отправляет результат UI-процессу).
- Для синхронизации (родительский процесс ждёт завершения дочернего).
- Для событий/сигналов (одна служба уведомляет другую о новых данных).
Без IPC процессы существовали бы в полной изоляции.
Основные методы IPC
Каналы (pipes)
- Однонаправленный канал между процессами.
- Пример:
ls | grep "txt"
в shell.
Очереди сообщений
- Процессы пишут и читают из очереди.
- Удобно для асинхронного обмена.
Разделяемая память
- Самый быстрый способ — несколько процессов используют один участок памяти.
- Требуется синхронизация (мьютексы, семафоры).
Сокеты
- Работают как локально, так и по сети.
- Пример: клиент-серверные приложения.
Сигналы
- Простые уведомления (например,
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 = межпроцессное взаимодействие.
- Нужен для обмена данными и координации работы процессов.
- Основные методы: каналы, очереди, разделяемая память, сокеты, сигналы.