Перейти к содержимому
10 / 15

Какие есть модели конкурентности — процессы, потоки, event loop, корутины — и что выбирать в Python?

Процессы дают настоящий параллелизм и изоляцию, но стоят памяти и требуют обмена через сериализацию. Потоки дешевле и делят память, но в CPython мешает GIL: одновременно исполнять байт-код может только один поток. Важная деталь — GIL освобождается на время блокирующих операций ввода-вывода, поэтому потоки всё равно полезны для IO. Event loop с корутинами (asyncio) держит тысячи одновременных ожиданий в одном потоке почти без накладных расходов, но любой блокирующий вызов останавливает весь цикл. Правило простое: задача IO-bound — asyncio или потоки; задача CPU-bound — процессы. В проде обычно комбинируют: несколько процессов-воркеров (по числу ядер), внутри каждого — event loop.

Какие есть модели конкурентности — процессы, потоки, event loop, корутины — и что выбирать в Python? | JScriptiser