Процесс и поток. Суть
#новичкам
Один из самых популярных вопросов на собесах "в чем отличия потоков и процессов?". Новичков он осаживает, потому что они изучали, как писать код, а не нюансы работы операционной системы и всех этих подкапотных дел. Плюс оба понятия как будто подразумевают какую-то движуху.
Но какую?
Погуляв по сети при подготовке к этой серии постов, я ужаснулся количеству путаницы, непонятицы, противоречивицы в "объяснениях" этой темы на русском языке. Надеюсь, что у меня получится лучше, поэтому буду рад фитбэку от новичков касательно понятности изложения.
Сейчас не будем вдаваться в детали работы этих сущностей(это в будущем). Сейчас важно просто понять их суть и как они взаимодействуют между собой.
Любая запущенная программа - это "процесс" с точки зрения ОС. По сути это
некая сущность внутри компьютера, которая в себя инкапсулирует весь необходимый объем мероприятий, чтобы ваш бинарник мог в реальности что-то там рассчитывать.
Но сам процесс ничего не считает. Он как оболочка или контейнер, внутри которого происходят расчеты. Само же исполнение кода(расчеты) реализуется потоками.
Обратимся к аналогии для пущего понимания. Мы в ресторане, в котором есть кухня. Кухня, обеспечивающая едой сотни людей в день - это довольно большая и сложная хреновина, в которой много чего есть: само помещение, вентиляция, холодильники, печки, сковородки и тд. Все это нужно для того, чтобы вы поели том-ям.
Но кухня сама по себе не работает. Нужны повара, которые по технологической карте из правильных ингредиентов будут готовить еду. Используя инструментарий кухни, повара производят еду.
Так вот кухня - это процесс, а повара - потоки.
Процесс нужен для обеспечения исполнения, а потоки - это и есть исполнение.
На самом деле пожарить вам стейк или скрутить шаурму может и один человек. Он будет делать все сам, просто не такие большие объемы будут. Если нужно мастабироваться и разделять обязанности, то придется нанимать еще поваров.
Давайте резюмируем и проговорим несколько важных вещей:
👉🏿
Процесс — это экземпляр выполняющейся программы. Это сущность, предоставляющая инструменты для исполнения кода.
👉🏿
Поток - само исполнение кода. Если где-то выполняются инструкции кода, значит там есть поток исполнения.
👉🏿 У каждого ресторана своя площадь, с другими заведениями он местом не делится. Так и
у процесса своё адресное пространство — там он царь и бог, но к чужой памяти у него нет доступа .
👉🏿 Повара на кухне свободно общаются и делят оборудование. *
Потоки одного процесса легко обмениваются данными, так как используют одну и ту же память и ресурсы
👉🏿 Если повар ошибётся и сломает холодильник — вся колбаса может протухнуть, клиенты будут тесно дружить следующие пару дней с белым другом и писать жалобы на ресторан, что может его вообще обанкротить. Но эта протухшая колбаса никак не повлияет на кафешку рядышком за углом.
Потоки могут сделать что-то нехорошее и досрочно завершить работу процесса с ошибкой. Но это никак не повлияет на работу других процессов.
Get to the essence. Stay cool.
#OS
Обсуждение 14
Обсуждение не доступно в веб-версии. Чтобы написать комментарий, перейдите в приложение Telegram.
Обсудить в Telegram