Потоки, процессы, GIL и обмен данными
Чем отличаются потоки и процессы? Что такое GIL в CPython, когда нужны синхронизация и IPC?
Ответить самому
Сначала сформулируйте ответ как на собеседовании, затем откройте разбор и оцените себя.
Короткий ответ
Процессы имеют отдельную память, потоки внутри процесса делят память. GIL ограничивает одновременное исполнение Python bytecode, но не отменяет race conditions и синхронизацию.
Полный разбор
Процесс - более тяжелая единица выполнения с отдельным адресным пространством. Поток легче: он живет внутри процесса и разделяет память, файловые дескрипторы и состояние процесса, но имеет свой stack.
GIL в CPython - глобальная блокировка, которую должен держать поток, исполняющий Python bytecode. Из-за этого CPU-bound Python-код обычно не ускоряется на нескольких потоках. Потоки полезны для I/O-bound задач, потому что GIL может отпускаться на ожидании I/O и в некоторых C-расширениях.
GIL не делает бизнес-инварианты атомарными. Для shared mutable state нужны Lock, Queue или другие примитивы синхронизации. Между процессами нельзя передать обычную Python-ссылку: нужны pipes, queues, sockets, shared memory, файлы, Redis или другой IPC/transport.