Вопрос проверяет понимание модели процессов, изоляции памяти и механизмов обмена данными между процессами.
По умолчанию память между процессами не разделяется — каждый процесс имеет собственное адресное пространство. Это означает, что переменные одного процесса недоступны напрямую в другом. Для обмена данными используют IPC-механизмы: очереди, пайпы, shared memory или сокеты. В некоторых случаях операционная система может использовать copy-on-write, но это не означает полноценного общего доступа к памяти.
Процесс в операционной системе — это изолированная единица выполнения.
Определение: Процесс — экземпляр программы со своим адресным пространством памяти, который не может напрямую обращаться к памяти другого процесса.
Основные причины:
Безопасность — процесс не может повредить память другого процесса.
Стабильность — ошибка в одном процессе не разрушает данные другого.
Управляемость — ОС может независимо планировать процессы.
На Unix-подобных системах при fork():
Создаётся копия адресного пространства процесса.
Фактически страницы памяти не копируются сразу.
Используется механизм copy-on-write:
пока память только читается, страницы могут быть общими;
при изменении создаётся копия.
Важно понимать, что это оптимизация, а не совместное использование памяти в логическом смысле.
Очереди (multiprocessing.Queue)
from multiprocessing import Process, Queue
def worker(q):
q.put("data")
q = Queue()
p = Process(target=worker, args=(q,))
p.start()
print(q.get())
p.join()
Pipe
Подходит для обмена между двумя процессами.
Shared memory
Позволяет реально разделять память:
from multiprocessing import Value
counter = Value('i', 0)
Сокеты и файлы
Используются в распределённых системах и микросервисах.
высокопроизводительные вычисления;
обмен большими массивами данных;
системы реального времени.
По умолчанию процессы изолированы и не разделяют память. Для обмена данными используются IPC-механизмы или специальные структуры shared memory, а copy-on-write является лишь оптимизацией при создании процессов.