Gymterview
senior

В чём разница между конкуренцией и параллелизмом?

Конкуренция (concurrency) — это способность системы управлять несколькими задачами, переключаясь между ними, при этом задачи не обязательно выполняются одновременно. Параллелизм (parallelism) — это одновременное выполнение нескольких вычислений, как правило, на нескольких процессорных ядрах.

Аналогия из жизни: конкуренция — один повар готовит несколько блюд, переключаясь между ними. Параллелизм — несколько поваров одновременно готовят части одного банкета.

Сравнение

Критерий Конкуренция (Concurrency) Параллелизм (Parallelism)
Суть Управление несколькими задачами Одновременное выполнение частей задачи
Потоки управления Обязательно несколько (Thread, корутина) Необязательно несколько потоков управления
Детерминированность Результат недетерминирован — зависит от порядка выполнения и синхронизации Может быть детерминированным (например, параллельное умножение элементов массива)
Количество ядер Возможна на одном ядре (переключение контекста) Требует нескольких ядер
Пример в Java ExecutorService с несколькими потоками, обрабатывающими разные запросы parallelStream(), Fork/Join для разбиения одной задачи

Пример

Пример
// Конкуренция: два потока обрабатывают разные задачи
ExecutorService executor = Executors.newFixedThreadPool(2);
executor.submit(() -> handleRequest(request1));
executor.submit(() -> handleRequest(request2));

// Параллелизм: одна задача разбивается на части
long sum = LongStream.rangeClosed(1, 1_000_000)
    .parallel()
    .sum();

Вывод

Конкуренция — это структура программы (как организовать работу с несколькими задачами), параллелизм — это свойство выполнения (одновременная работа на нескольких ядрах). Программа может быть конкурентной, но не параллельной (один процессор, переключение контекста), и наоборот — параллельной, но не конкурентной (SIMD-инструкции).

На собеседовании: классический вопрос — дать определения и привести примеры. Помните формулу Роба Пайка: «Concurrency is about dealing with lots of things at once. Parallelism is about doing lots of things at once.»