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


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

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


1200


источник


Ответы:


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

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

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


1088



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

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


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

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


627



Обработать:

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

Нить:

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

Я заимствовал вышеупомянутую информацию из Знание Квест! блог ,


211



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

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

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

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

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

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

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        |

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

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

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

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

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

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

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


88



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

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

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

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

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

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


53



An application consists of one or more processes. A process, in the simplest terms, is an executing program. One or more threads run in the context of the process. A thread is the basic unit to which the operating system allocates processor time. A thread can execute any part of the process code, including parts currently being executed by another thread. A fiber is a unit of execution that must be manually scheduled by the application. Fibers run in the context of the threads that schedule them.

Stolen from here.


40



A process is a collection of code, memory, data and other resources. A thread is a sequence of code that is executed within the scope of the process. You can (usually) have multiple threads executing concurrently within the same process.


22



  • Every process is a thread (primary thread).
  • But every thread is not a process. It is a part(entity) of a process.

20



A process is an executing instance of an application. What does that mean? Well, for example, when you double-click the Microsoft Word icon, you start a process that runs Word. A thread is a path of execution within a process. Also, a process can contain multiple threads. When you start Word, the operating system creates a process and begins executing the primary thread of that process.

It’s important to note that a thread can do anything a process can do. But since a process can consist of multiple threads, a thread could be considered a ‘lightweight’ process. Thus, the essential difference between a thread and a process is the work that each one is used to accomplish. Threads are used for small tasks, whereas processes are used for more ‘heavyweight’ tasks – basically the execution of applications.

Another difference between a thread and a process is that threads within the same process share the same address space, whereas different processes do not. This allows threads to read from and write to the same data structures and variables, and also facilitates communication between threads. Communication between processes – also known as IPC, or inter-process communication – is quite difficult and resource-intensive.


17



Process:

  1. Process is a heavy weight process.
  2. Process is a separate program that has separate memory,data,resources ect.
  3. Process are created using fork() method.
  4. Context switch between the process is time consuming.

Example:
Say, opening any browser (mozilla, Chrome, IE). At this point new process will start to execute.

Threads:

  1. Threads are light weight processes.Threads are bundled inside the process.
  2. Threads have a shared memory,data,resources,files etc.
  3. Threads are created using clone() method.
  4. Context switch between the threads are not much time consuming as Process.

Example:
Opening multiple tabs in the browser.


14