В чем разница между процессом и потоком? - PullRequest
1429 голосов
/ 14 октября 2008

В чем техническая разница между процессом и потоком?

У меня такое ощущение, что слово «процесс» используется слишком часто, и есть также аппаратные и программные потоки. Как насчет легких процессов в таких языках, как Erlang ? Есть ли определенная причина использовать один термин над другим?

Ответы [ 33 ]

1299 голосов
/ 14 октября 2008

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

Я не уверен, какие «аппаратные» и «программные» темы вы могли бы использовать. Потоки - это функция операционной среды, а не функция ЦП (хотя ЦП обычно выполняет операции, которые делают потоки эффективными).

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

725 голосов
/ 14 октября 2008

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

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


Нашел это в MSDN здесь:
О процессах и потоках

Microsoft Windows поддерживает вытесняющую многозадачность, которая создает эффект одновременного выполнения нескольких потоков из нескольких процессов. На многопроцессорном компьютере система может одновременно выполнять столько потоков, сколько имеется процессоров на компьютере.

271 голосов
/ 19 марта 2010

Процесс:

  • Выполнение экземпляра программы называется процессом.
  • Некоторые операционные системы используют термин «задача» для обозначения выполняемой программы.
  • Процесс всегда сохраняется в основной памяти, также называемой основной памятью или оперативной памятью.
  • Следовательно, процесс называется активной сущностью. Исчезает, если машина перезагружена.
  • Несколько процессов могут быть связаны с одной и той же программой.
  • В многопроцессорной системе несколько процессов могут выполняться параллельно.
  • В однопроцессорной системе, хотя истинный параллелизм не достигается, применяется алгоритм планирования процессов, и процессор планирует выполнять каждый процесс по одному, создавая иллюзию параллелизма.
  • Пример: Выполнение нескольких экземпляров программы «Калькулятор». Каждый из экземпляров называется процессом.

Тема:

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

Я позаимствовал вышеуказанную информацию из Quest Knowledge! блог .

109 голосов
/ 22 октября 2013

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

У нас есть следующее из раздела 2.2.2 Модель классической резьбы в Современные операционные системы 3e от Tanenbaum:

Модель процесса основана на двух независимых концепциях: ресурс группировка и исполнение. Иногда полезно разделить их; это где темы вступают ....

Он продолжает:

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

Далее он приводит следующую таблицу:

Per process items             | Per thread items
------------------------------|-----------------
Address space                 | Program counter
Global variables              | Registers
Open files                    | Stack
Child processes               | State
Pending alarms                |
Signals and signal handlers   |
Accounting information        |

Давайте разберемся с проблемой аппаратного многопоточности . Классически ЦП будет поддерживать один поток выполнения, поддерживая состояние потока с помощью одного счетчика программы и набора регистров. Но что произойдет, если пропадет кеш? Извлечение данных из основной памяти занимает много времени, и пока это происходит, процессор просто бездействует. Таким образом, у кого-то возникла идея в основном иметь два набора состояний потока (ПК + регистры), чтобы другой поток (может быть, в том же процессе, может быть, в другом процессе) мог выполнить работу, пока другой поток ожидает в основной памяти. Существует несколько имен и реализаций этой концепции, таких как HyperThreading и Одновременная многопоточность (SMT для краткости).

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

  1. Темы в пользовательском пространстве
  2. Потоки ядра
  3. Сочетание двух

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

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

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

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

80 голосов
/ 24 декабря 2012

Чтобы объяснить больше в отношении параллельного программирования

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

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

Имея в виду среднего человека,

На вашем компьютере откройте Microsoft Word и веб-браузер. Мы называем эти два процесса .

В Microsoft Word вы набираете какую-то вещь, и она автоматически сохраняется. Теперь вы бы заметили, что редактирование и сохранение происходит параллельно - редактирование в одном потоке и сохранение в другом.

47 голосов
/ 14 октября 2008

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

украдено у здесь .

24 голосов
/ 14 октября 2008

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

22 голосов
/ 10 августа 2013
  • Каждый процесс является потоком (первичным потоком).
  • Но каждый поток - это не процесс. Это часть (сущность) процесса.
21 голосов
/ 07 декабря 2016

Пример реального мира для процесса и потока Это даст вам основную идею о потоке и процессе enter image description here

Я позаимствовал вышеуказанную информацию из ответа Скотта Лэнгхэма - спасибо

20 голосов
/ 01 сентября 2017

Процесс:

  1. Процесс представляет собой тяжелый процесс.
  2. Процесс - это отдельная программа, которая имеет отдельную память, данные, ресурсы и т. Д.
  3. Процесс создается с использованием метода fork ().
  4. Переключение контекста между процессами занимает много времени.

Пример:
Скажем, открываем любой браузер (Mozilla, Chrome, IE). В этот момент новый процесс начнет выполняться.

Тема:

  1. Нитки - это процессы с малым весом. Нити связаны внутри процесса.
  2. Потоки имеют общую память, данные, ресурсы, файлы и т. Д.
  3. Потоки создаются методом clone ().
  4. Переключение контекста между потоками не так много времени, как процесс.

Пример:
Открытие нескольких вкладок в браузере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...