TGViewer
Грокаем C++ Грокаем C++ @grokaemcpp · 9.36K subscribers
Post #1090 3.36K
Процесс и поток. Side‑by‑side
#новичкам

Мы разобрали, что процесс — это контейнер ресурсов, а поток — единица выполнения. Теперь давайте поставим их рядом и посмотрим, кто во что горазд. Будет еще немного новой информации, но подробности оставим за скобками.

👉🏿 Суть
Процесс - это окружения для выполнения программы. Поток - само исполнение.

👉🏿 Память
Каждый процесс имеет своё изолированное независимое виртуальное адресное пространство. В базе процесс не имеет доступа к данным другого процесса.

Все потоки одного процесса разделяют его память (кучу, глобальные переменные, код) и могут легко обращаться к одним и тем же данным.

👉🏿 Изоляция

Сбой одного процесса обычно не влияет на другие. ОС в базе запрещает одному процессу влезать в дела другого.

Сбой же в одном потоке (например, segmentation fault) убивает весь процесс. Потоки одного процесса легко обмениваются информацией

👉🏿 Создание и переключение

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

Потоки же создавать легче: нужен только новый стек и небольшой блок управления(нужный например для сохранения контекста). Переключаются потоки сменой контекста aka подменой нескольких регистров.

👉🏿 Взаимодействие
Есть термин IPC - Inter Process Communication. Реализовывать межпроцессное взаимодействие можно с помощью пайпов, сокетов, shared memory, сигналов. Требует использования механизмов ядра.

С потоками чуть легче, они имеют доступ к одной и той же памяти. Только чтобы не нарваться на гонку данных, нужна синхронизация через мьютексы, атомики, барьеры.

👉🏿 Ресурсы
Процесс владеет всей своей памятью(кодом, кучей, сегментом глобальных данных), а также файловыми дескрипторами и переменными окружения.

Потоки же имеют доступ ко всем этим ресурсам + у них есть персональные стеки и набор регистров.

👉🏿 ID
У процесса есть PID, с помощью которого ОС идентифицирует процесс.

У каждого потока также есть свои айдишники - TID, и они принадлежат одному PID.

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

See the difference. Stay cool.

#OS
  • 👍 26
  • ❤ 13
  • 🔥 9
More from @grokaemcpp
  1. Oct 8, 2026​​Strict weak ordering #опытным На первый взгляд, всё выглядит рабочим: мы создаём 40 зака…
  2. Oct 7, 2026​​Где-то баг... #опытным Вот вам код: struct Order { int price; int id; }; int main() { st…
  3. Oct 5, 2026Откуда spurious wakeup на кондваре? #опытным У кондваров есть метод std::condition_variabl…
  4. Oct 1, 2026​​Stacktrace. Tips #опытным Чтобы полноценно работать со стандартными трейсами, нужно знат…
  5. Sep 28, 2026​​Stacktrace #опытным Одна из проблема исключений - непонятно, откуда оно прилетело. Ну да…
  6. Sep 25, 2026​​std::spanstream #опытным Радостная весть для всех, кто пользуется iostreams! В C++23 доб…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →