Этот блог даст вам краткое объяснение основных различий между процессами и потоками.
Содержание:
- Знакомство с процессами
- Знакомство с нитями
- Краткое объяснение основных различий между процессами и потоками
Знакомство с процессами
Процесс — это независимая программа, которая находится в процессе выполнения. Он содержит программный код и его активность. В зависимости от операционной системы (ОС) процесс может состоять из нескольких потоков выполнения. Именно операционная система (ОС) берет эти байты и запускает их, превращая программу во что-то полезное.
Когда вы одновременно открываете несколько программ на одном компьютере, задумывались ли вы когда-нибудь, как это возможно? Это происходит из-за разделения времени ЦП. Где операционная система (ОС) может создавать иллюзию существования множества виртуальных ЦП, хотя на самом деле существует только один физический ЦП.
От программы к процессу
Когда программа запускается, обработка выполняется в двух пространствах системы, которые называются Пространство ядра и Пространство пользователя. Два пространства обработки неявно мешают друг другу, и обработка программы продолжается.
- Пространство ядра: может быть доступно только пользовательским процессам. Это то, во что пользователю не разрешено вмешиваться, например, в ввод-вывод.
- Пространство пользователя:вычислительный ресурс, выделенный пользователю, и это ресурс, к которому исполняемая программа может получить прямой доступ.
ОС подготавливает почву для выполнения программы, загружая код и статические данные в память, создавая и инициализируя стек, выделяя часть памяти в куче и другие действия, связанные с настройкой ввода-вывода. Когда программа загружается в память и становится процессом, который делится на 4 раздела для пользовательского пространства.
Расположение памяти в программе
Часть пользовательского пространства виртуального пространства подразделяется на стек и кучу, BSS, данные, Текст (часть размером 3 ГБ, как показано на рисунке).
- Стек.Пространство стека расположено прямо под пространством ядра ОС, обычно это пространство стека, противоположное области кучи, и расширяется вниз к более низким адресам. Стек представляет собой структуру данных LIFO (последний пришел — первый ушел). В информатике стек — это абстрактный тип данных, который служит набором элементов с двумя основными операциями pop и push. .
- Куча: часть памяти, в которой находится динамически выделенная память (т. е. память, выделенная с помощью
malloc/new
). Память, выделенная из кучи, останется выделенной до тех пор, пока память не станетfree/delete
или программа не завершится.
- BSS: содержит все неинициализированные глобальные и статические переменные. Все переменные в этом сегменте инициализированы нулем (0) и указателем с нулевым указателем.
- Данные: содержит явно инициализированные глобальные и статические переменные. Размер сегмента данных определяется размером значений в исходном коде программы и не меняется во время выполнения.
- Текст:содержит двоичный файл скомпилированной программы. Текстовый сегмент — это сегмент только для чтения, который предотвращает случайное изменение программы. Он доступен для совместного использования, поэтому для часто выполняемых программ, таких как текстовые редакторы и т. д., в памяти должна находиться только одна копия.
Состояние процесса
- Новое: процесс создается.
- Готово.Процесс имеет все необходимые ресурсы, но ЦП не выполняет инструкции этого процесса.
- Выполняется. ЦП выполняет инструкции этого процесса.
- Ожидание: процесс не может быть запущен в данный момент, так как он ожидает, когда какой-то ресурс станет доступным или произойдет какое-то событие.
- Завершено: процесс завершен.
Планирование очередей
- Очередь заданий:набор всех процессов в системе.
- Очередь готовности: набор всех процессов, находящихся в основной памяти, готовых и ожидающих выполнения.
- Очереди устройств: набор всех процессов, ожидающих устройства ввода-вывода.
Переключение контекста
Переключение контекста происходит, когда квант времени для одного процесса истек, и новый процесс должен быть загружен из очереди готовности. Переключение контекста — это процедура, которой ЦП (центральный процессор) компьютера следует для перехода от одной задачи (или процесса) к другой, гарантируя, что задачи не конфликтуют. Эффективное переключение контекста имеет решающее значение, если компьютер должен обеспечивать удобную многозадачность. Переключение контекста происходит очень часто, и накладные расходы на это переключение — это просто потерянное процессорное время, поэтому переключение контекста (сохранение и восстановление состояния) должно происходить как можно быстрее.
Знакомство с нитями
В одном процессе у вас может быть несколько потоков, одновременно выполняющих поток вашей программы. Потоки в рамках одного процесса имеют одинаковое адресное пространство, т. е. они совместно используют состояния машины памяти этого процесса, поэтому между ними нет защиты. Из-за этого потоки, которые находятся в одном и том же процессе, совместно используют объекты, выделенные для них в куче, и заставят программу вести себя непредсказуемо, если доступ к общим данным не скоординирован должным образом с использованием синхронизации.
Жизненный цикл потока
- Новое: создается цепочка, также называемая рожденной цепочкой.
- Работоспособность: когда вновь созданный поток запускается и становится работоспособным, считается, что он находится в рабочем состоянии.
- Ожидание. Это состояние наступает, когда один поток выполняет свою функцию, а другой ожидает, пока он выполнит свою функцию. Ожидающий поток выполнит свою функцию только тогда, когда первый поток подаст ему сигнал об этом.
- Время ожидания. Поток может прийти в это состояние на ограниченный период времени, т. е. когда он возвращается к стадии готовности к выполнению, а временной интервал истекает или когда происходит событие, которого он ждал.
- Завершено:поток завершен.
Пример
Результат должен быть:
Before Thread Hello After Thread
Хорошие вещи о потоках
- Низкое переключение контекста
- Используйте зрительную память и делитесь ресурсами.
- Общайтесь между потоками.
- Легко создавать и использовать несколько ресурсов из памяти.
Основные отличия
Адресное пространство
Потоки могут совместно использовать адресное пространство в рамках одного процесса. Потоки имеют собственный регистр и стек, которые используются для переключения контекстано процессы имеют собственное адресное пространство, нет необходимости Поделиться.
Данные и сегмент
Потоки не владели данными и сегментами. Но получите это от процесса, в котором находится этот поток, который позволяет потоку обмениваться данными и сегментировать их. Процессы будут иметь копию данных и сегментов из родительского процесса. Копии являются новыми при изменении данных, а сегмент оригинала не изменится. Вот почему процессы не могут обмениваться данными и сегментировать их.
Коммуникация
Поток был разработан для прямого общения, когда они находятся в одном и том же процессе. В отличие от процесса, который не предназначен для такого рода вещей, ему требуется IPC (межпроцессное взаимодействие), чтобы позволить дочерним процессам общаться между собой.
Контроль
Поток может управлять другими потоками, которые находятся в рамках того же процесса, но процесс не может управлять другими процессами того же уровня, может управлять только дочерними процессами.
Накладные расходы на переключение контекста
Потоки совместно используют виртуальную память в рамках одного процесса. При смене потока новый поток будет использовать ту же виртуальную память, что и старый поток. Это делает накладные расходы при смене потока очень низким. С другой стороны, процесс не использует виртуальную память для переключения процессов, которые необходимо сначала сохранить в старом состоянии. Затем загрузите состояние другого процесса, это количество потерянных накладных расходов.
использованная литература
Процессы
Авраам Зильбершатц, Грег Ганье и Питер Баер Галвин, «Концепции операционной системы, девятое издание, глава 3 A…www.cs.uic. образование»