Параллелизм и конкурентность

Что такое параллелизм и конкурентность?

подробнее

Параллелизм - это реальное одновременное выполнение задач на разных ядрах процессора.
Главная цель параллелизма - ускорить вычисления. Большая и сложная задача разбивается на более мелкие, независимые подзадачи, которые распределяются между доступными ядрами процессора. Каждое ядро решает свою часть задачи, и в итоге общее время выполнения значительно сокращается.
Реализовано в модуле multiprocessing.

Конкурентность - Это иллюзия одновременности. Процессор быстро переключается между задачами. В каждый момент времени выполняется только одна задача, но из-за скорости кажется, что все сразу.
Конкурентность особенно полезна, когда задачи часто ожидают внешних событий (например, ответа от сервера или чтения файла). Пока одна задача ждёт, система может переключиться на другую и выполнять полезную работу.
Реализовано в модулях: threading, asyncio.

GIL в Python

подробнее

В стандартном Python (CPython) есть GIL (Global Interpreter Lock) — «замок», который разрешает только одному потоку выполнять код в один момент времени. Из-за GIL: Обычные потоки (threading) в Python дают конкурентность, но не дают параллелизма для вычислений (CPU-bound задач). Решение: Для реального параллелизма нужно использовать multiprocessing, так как у каждого процесса свой интерпретатор и свой GIL.