#новичкам
Мы разобрали, что процесс — это контейнер ресурсов, а поток — единица выполнения. Теперь давайте поставим их рядом и посмотрим, кто во что горазд. Будет еще немного новой информации, но подробности оставим за скобками.
👉🏿 Суть
Процесс - это окружения для выполнения программы. Поток - само исполнение.
👉🏿 Память
Каждый процесс имеет своё изолированное независимое виртуальное адресное пространство. В базе процесс не имеет доступа к данным другого процесса.
Все потоки одного процесса разделяют его память (кучу, глобальные переменные, код) и могут легко обращаться к одним и тем же данным.
👉🏿 Изоляция
Сбой одного процесса обычно не влияет на другие. ОС в базе запрещает одному процессу влезать в дела другого.
Сбой же в одном потоке (например, segmentation fault) убивает весь процесс. Потоки одного процесса легко обмениваются информацией
👉🏿 Создание и переключение
Процессы тяжело создавать(
fork() копирует таблицы страниц, дескрипторы, структуры ядра) и переключать(требуется смена таблиц страниц)Потоки же создавать легче: нужен только новый стек и небольшой блок управления(нужный например для сохранения контекста). Переключаются потоки сменой контекста aka подменой нескольких регистров.
👉🏿 Взаимодействие
Есть термин IPC - Inter Process Communication. Реализовывать межпроцессное взаимодействие можно с помощью пайпов, сокетов, shared memory, сигналов. Требует использования механизмов ядра.
С потоками чуть легче, они имеют доступ к одной и той же памяти. Только чтобы не нарваться на гонку данных, нужна синхронизация через мьютексы, атомики, барьеры.
👉🏿 Ресурсы
Процесс владеет всей своей памятью(кодом, кучей, сегментом глобальных данных), а также файловыми дескрипторами и переменными окружения.
Потоки же имеют доступ ко всем этим ресурсам + у них есть персональные стеки и набор регистров.
👉🏿 ID
У процесса есть PID, с помощью которого ОС идентифицирует процесс.
У каждого потока также есть свои айдишники - TID, и они принадлежат одному PID.
Как-то так. Надеюсь, что теперь у вас есть понимание, что вопрос о разнице между потоком и процессом почти эквивалентен вопросу о разнице головы и зубов. Это хоть и тесно связанные, но абсолютно разные понятия.
See the difference. Stay cool.
#OS