В чём разница между конкуренцией и параллелизмом?
Конкуренция (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.»