Конкуренция — это способ одновременного решения множества задач.
Признаки:
- Наличие нескольких потоков управления (например, Thread в Java, корутина в Kotlin), если поток управления один, то конкурентного выполнения быть не может
- Недетерминированный результат выполнения. Результат зависит от случайных событий, реализации и того, как была проведена синхронизация. Даже если каждый поток полностью детерминированный, итоговый результат будет недетерминированным
Параллелизм — это способ выполнения разных частей одной задачи.
Признаки:
- Необязательно имеет несколько потоков управления
- Может приводить к детерминированному результату, так, например, результат умножения каждого элемента массива на число, не изменится, если умножать его по частям параллельно.