В чем разница между параллелизмом и конкурентностью?

«В чем разница между параллелизмом и конкурентностью?» — вопрос из категории Многопоточность, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Параллелизм (Parallelism) — это физическое одновременное выполнение нескольких задач на разных ядрах/процессорах. Требует многопроцессорной системы.

Ключевое различие: Конкурентность — про логическую одновременность (дизайн системы), параллелизм — про физическую одновременность (исполнение).

Пример в Swift (Grand Central Dispatch):

import Foundation

// Конкурентность: задачи ставятся в очередь и выполняются,
// возможно, с переключением контекста
let concurrentQueue = DispatchQueue(label: "concurrent", attributes: .concurrent)
concurrentQueue.async { print("Concurrent Task 1") }
concurrentQueue.async { print("Concurrent Task 2") }

// Параллелизм: задачи выполняются физически одновременно
// на доступных ядрах (если система поддерживает)
DispatchQueue.concurrentPerform(iterations: 4) { iteration in
    print("Parallel task (iteration) on thread: (Thread.current)")
}

Практический смысл:

  • На одноядерном процессоре возможна только конкурентность.
  • Многопоточное программирование часто реализует конкурентность.
  • Параллельные вычисления (например, обработка изображений) используют параллелизм для ускорения.