Поток 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
- Процесс = отдельная программа со своей памятью.
- Поток = лёгкая единица выполнения внутри процесса.
- Для изоляции лучше процессы, для скорости — потоки.