Ответ
Хотя эти термины часто путают, они описывают разные подходы к выполнению задач.
Конкурентность (Concurrency) — это способность системы управлять несколькими задачами в один и тот же период времени, переключаясь между ними. Задачи могут выполняться поочередно на одном ядре процессора, создавая иллюзию одновременности.
- Цель: Структурировать код для решения нескольких задач одновременно (например, обработка сетевых запросов и обновление UI).
- Суть: Работа с множеством задач.
Параллельность (Parallelism) — это фактическое одновременное выполнение нескольких задач или частей одной задачи на разных физических ядрах процессора или на разных процессорах.
- Цель: Ускорить вычисления за счет распараллеливания.
- Суть: Одновременное выполнение множества задач.
Аналогия:
- Конкурентность: Один бариста готовит эспрессо и одновременно взбивает молоко для капучино. Он быстро переключается между двумя задачами, но в каждый конкретный момент делает что-то одно.
- Параллельность: Два бариста работают одновременно, каждый на своей кофемашине. Две задачи выполняются в одно и то же время.
Пример в Python:
import threading
import multiprocessing
import time
def cpu_bound_task():
# Задача, интенсивно использующая процессор
count = 0
for i in range(10**7):
count += i
# Конкурентность: потоки выполняются на одном ядре из-за GIL.
# Общее время будет примерно равно последовательному выполнению.
t1 = threading.Thread(target=cpu_bound_task)
t2 = threading.Thread(target=cpu_bound_task)
t1.start()
t2.start()
t1.join()
t2.join()
# Параллельность: процессы используют разные ядра CPU.
# Общее время выполнения будет значительно меньше.
p1 = multiprocessing.Process(target=cpu_bound_task)
p2 = multiprocessing.Process(target=cpu_bound_task)
p1.start()
p2.start()
p1.join()
p2.join()