В чём ключевое отличие между процессом и потоком в многопоточности?

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

Ответ

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

Ключевые отличия:

  • Изоляция: Процессы изолированы друг от друга. Потоки внутри одного процесса разделяют память (heap) и файловые дескрипторы.
  • Стоимость создания: Создание процесса (fork) — дорогая операция. Создание потока — значительно легче и быстрее.
  • Влияние сбоев: Сбой (краш) одного потока приводит к падению всего процесса. Сбой процесса не затрагивает другие процессы.

Пример (Swift / Grand Central Dispatch): Один процесс может содержать множество потоков.

// Это один процесс (приложение).
// DispatchQueue создает и управляет потоками внутри него.
DispatchQueue.global(qos: .background).async {
    print("Выполняется в фоновом потоке 1")
}
DispatchQueue.global(qos: .utility).async {
    print("Выполняется в фоновом потоке 2")
}
// Итог: 1 процесс, 2+ потока.