Во-первых, давайте посмотрим на теоретический аспект. Вам необходимо понять, что такое концептуальный процесс, чтобы понять разницу между процессом и потоком и тем, что между ними.
У нас есть следующее из раздела 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 для краткости).
Теперь давайте посмотрим на сторону программного обеспечения. Существует три основных способа реализации потоков на стороне программного обеспечения.
- Темы в пользовательском пространстве
- Потоки ядра
- Сочетание двух
Все, что вам нужно для реализации потоков, - это возможность сохранять состояние процессора и поддерживать несколько стеков, что во многих случаях можно сделать в пользовательском пространстве. Преимущество потоков в пользовательском пространстве заключается в супер-быстром переключении потоков, поскольку вам не нужно захватывать ядро и возможность планировать свои потоки так, как вам нравится. Самый большой недостаток - невозможность блокировать ввод-вывод (который блокировал бы весь процесс и все его пользовательские потоки), что является одной из основных причин, по которым мы используем потоки в первую очередь. Блокировка ввода / вывода с использованием потоков во многих случаях значительно упрощает разработку программы.
Потоки ядра обладают тем преимуществом, что могут использовать блокировку ввода-вывода, в дополнение к тому, что все проблемы с расписанием оставляются для ОС. Но каждое переключение потоков требует захвата в ядро, что потенциально относительно медленно. Тем не менее, если вы переключаете потоки из-за заблокированного ввода-вывода, это на самом деле не проблема, поскольку операция ввода-вывода, вероятно, в любом случае застряла в ядре.
Другой подход состоит в объединении двух потоков с несколькими потоками ядра, каждый из которых имеет несколько пользовательских потоков.
Итак, возвращаясь к вашему вопросу о терминологии, вы можете увидеть, что процесс и поток выполнения - это две разные концепции, и выбор того, какой термин использовать, зависит от того, о чем вы говорите. Что касается термина «облегченный процесс», я лично не вижу в этом смысла, поскольку он на самом деле не передает происходящего, а также термин «поток исполнения».