Поток vs Процесс: в чём разница?

Когда мы пишем программы, часто нужно выполнять несколько действий одновременно.
Для этого используются процессы и потоки. Оба обеспечивают параллельность, но по-разному.


Что такое процесс?

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

Пример:
Открыли браузер и редактор кода — это два разных процесса.


Что такое поток?

  • Поток — это единица выполнения внутри процесса.
  • Потоки одного процесса:
    • Делят общую память и ресурсы.
    • Но у каждого свой стек и состояние выполнения.

Пример:
В браузере один поток может загружать страницу, другой выполнять JavaScript, третий — отрисовывать.


Основные отличия

АспектПроцессПоток
ПамятьОтдельная у каждого процессаОбщая в рамках процесса
НагрузкаБольшая (дорогой контекст-свитч)Лёгкая (дешевле переключение)
ИзоляцияСильная (сбой не влияет на других)Слабая (ошибка бьёт все потоки)
ОбщениеIPC (очереди, сокеты)Общая память
СозданиеМедленнееБыстрее

Пример кода

Python: многопроцессность

from multiprocessing import Process

def work():
    print("Процесс выполняется")

if __name__ == "__main__":
    p = Process(target=work)
    p.start()
    p.join()

Когда использовать

Процессы

  • Тяжёлые вычисления (CPU-bound).
  • Требуется надёжная изоляция.
  • Больше стабильности, но дороже по ресурсам.

Потоки

  • I/O-задачи (сеть, файлы).
  • Быстрое взаимодействие.
  • Эффективнее, но менее безопасно.

Summary

  • Процесс = отдельная программа со своей памятью.
  • Поток = лёгкая единица выполнения внутри процесса.
  • Для изоляции лучше процессы, для скорости — потоки.