Этот блог даст вам краткое объяснение основных различий между процессами и потоками.

Содержание:

  • Знакомство с процессами
  • Знакомство с нитями
  • Краткое объяснение основных различий между процессами и потоками

Знакомство с процессами

Процесс — это независимая программа, которая находится в процессе выполнения. Он содержит программный код и его активность. В зависимости от операционной системы (ОС) процесс может состоять из нескольких потоков выполнения. Именно операционная система (ОС) берет эти байты и запускает их, превращая программу во что-то полезное.

Когда вы одновременно открываете несколько программ на одном компьютере, задумывались ли вы когда-нибудь, как это возможно? Это происходит из-за разделения времени ЦП. Где операционная система (ОС) может создавать иллюзию существования множества виртуальных ЦП, хотя на самом деле существует только один физический ЦП.

От программы к процессу

Когда программа запускается, обработка выполняется в двух пространствах системы, которые называются Пространство ядра и Пространство пользователя. Два пространства обработки неявно мешают друг другу, и обработка программы продолжается.

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

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

Расположение памяти в программе

Часть пользовательского пространства виртуального пространства подразделяется на стек и кучу, BSS, данные, Текст (часть размером 3 ГБ, как показано на рисунке).

  • Стек.Пространство стека расположено прямо под пространством ядра ОС, обычно это пространство стека, противоположное области кучи, и расширяется вниз к более низким адресам. Стек представляет собой структуру данных LIFO (последний пришел — первый ушел). В информатике стек — это абстрактный тип данных, который служит набором элементов с двумя основными операциями pop и push. .

  • Куча: часть памяти, в которой находится динамически выделенная память (т. е. память, выделенная с помощью malloc/new). Память, выделенная из кучи, останется выделенной до тех пор, пока память не станет free/delete или программа не завершится.
  • BSS: содержит все неинициализированные глобальные и статические переменные. Все переменные в этом сегменте инициализированы нулем (0) и указателем с нулевым указателем.
  • Данные: содержит явно инициализированные глобальные и статические переменные. Размер сегмента данных определяется размером значений в исходном коде программы и не меняется во время выполнения.
  • Текст:содержит двоичный файл скомпилированной программы. Текстовый сегмент — это сегмент только для чтения, который предотвращает случайное изменение программы. Он доступен для совместного использования, поэтому для часто выполняемых программ, таких как текстовые редакторы и т. д., в памяти должна находиться только одна копия.

Состояние процесса

  • Новое: процесс создается.
  • Готово.Процесс имеет все необходимые ресурсы, но ЦП не выполняет инструкции этого процесса.
  • Выполняется. ЦП выполняет инструкции этого процесса.
  • Ожидание: процесс не может быть запущен в данный момент, так как он ожидает, когда какой-то ресурс станет доступным или произойдет какое-то событие.
  • Завершено: процесс завершен.

Планирование очередей

  • Очередь заданий:набор всех процессов в системе.
  • Очередь готовности: набор всех процессов, находящихся в основной памяти, готовых и ожидающих выполнения.
  • Очереди устройств: набор всех процессов, ожидающих устройства ввода-вывода.

Переключение контекста

Переключение контекста происходит, когда квант времени для одного процесса истек, и новый процесс должен быть загружен из очереди готовности. Переключение контекста — это процедура, которой ЦП (центральный процессор) компьютера следует для перехода от одной задачи (или процесса) к другой, гарантируя, что задачи не конфликтуют. Эффективное переключение контекста имеет решающее значение, если компьютер должен обеспечивать удобную многозадачность. Переключение контекста происходит очень часто, и накладные расходы на это переключение — это просто потерянное процессорное время, поэтому переключение контекста (сохранение и восстановление состояния) должно происходить как можно быстрее.

Знакомство с нитями

В одном процессе у вас может быть несколько потоков, одновременно выполняющих поток вашей программы. Потоки в рамках одного процесса имеют одинаковое адресное пространство, т. е. они совместно используют состояния машины памяти этого процесса, поэтому между ними нет защиты. Из-за этого потоки, которые находятся в одном и том же процессе, совместно используют объекты, выделенные для них в куче, и заставят программу вести себя непредсказуемо, если доступ к общим данным не скоординирован должным образом с использованием синхронизации.

Жизненный цикл потока

  • Новое: создается цепочка, также называемая рожденной цепочкой.
  • Работоспособность: когда вновь созданный поток запускается и становится работоспособным, считается, что он находится в рабочем состоянии.
  • Ожидание. Это состояние наступает, когда один поток выполняет свою функцию, а другой ожидает, пока он выполнит свою функцию. Ожидающий поток выполнит свою функцию только тогда, когда первый поток подаст ему сигнал об этом.
  • Время ожидания. Поток может прийти в это состояние на ограниченный период времени, т. е. когда он возвращается к стадии готовности к выполнению, а временной интервал истекает или когда происходит событие, которого он ждал.
  • Завершено:поток завершен.

Пример

Результат должен быть:

Before Thread
Hello 
After Thread

Хорошие вещи о потоках

  • Низкое переключение контекста
  • Используйте зрительную память и делитесь ресурсами.
  • Общайтесь между потоками.
  • Легко создавать и использовать несколько ресурсов из памяти.

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

Адресное пространство

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

Данные и сегмент

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

Коммуникация

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

Контроль

Поток может управлять другими потоками, которые находятся в рамках того же процесса, но процесс не может управлять другими процессами того же уровня, может управлять только дочерними процессами.

Накладные расходы на переключение контекста

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

использованная литература