Поток — это поток выполнения через код процесса, со своим собственным программным счетчиком, который отслеживает, какая инструкция должна выполняться в следующий раз, системные регистры, в которых хранятся текущие рабочие переменные, и стек, содержащий историю выполнения.
Поток делится со своими равноправными потоками такой информацией, как сегмент кода, сегмент данных и открытые файлы. Когда один поток изменяет элемент памяти сегмента кода, все остальные потоки видят это.
Нить также называется облегченным процессом . Потоки предоставляют способ повысить производительность приложений за счет параллелизма. Потоки представляют собой программный подход к повышению производительности операционной системы за счет сокращения служебных потоков, что эквивалентно классическому процессу.
Каждый поток принадлежит ровно одному процессу, и никакой поток не может существовать вне процесса. Каждый поток представляет отдельный поток управления. Потоки были успешно использованы при реализации сетевых серверов и веб-серверов. Они также обеспечивают подходящую основу для параллельного выполнения приложений на мультипроцессорах с общей памятью. На следующем рисунке показана работа однопоточного и многопоточного процесса.
Разница между процессом и потоком
SN | Процесс | Нить |
---|---|---|
1 | Процесс тяжелый или ресурсоемкий. | Нить имеет малый вес и требует меньше ресурсов, чем процесс. |
2 | Процесс переключения требует взаимодействия с операционной системой. | Переключение потоков не требует взаимодействия с операционной системой. |
3 | В нескольких средах обработки каждый процесс выполняет один и тот же код, но имеет собственные ресурсы памяти и файлов. | Все потоки могут совместно использовать один и тот же набор открытых файлов, дочерних процессов. |
4 | Если один процесс заблокирован, то ни один другой процесс не может выполняться, пока первый процесс не будет разблокирован. | Пока один поток заблокирован и ожидает, второй поток в той же задаче может работать. |
5 | Несколько процессов без использования потоков используют больше ресурсов. | Многопоточные процессы используют меньше ресурсов. |
6 | В нескольких процессах каждый процесс работает независимо от других. | Один поток может читать, записывать или изменять данные другого потока. |
Преимущества нити
- Потоки минимизируют время переключения контекста.
- Использование потоков обеспечивает параллелизм внутри процесса.
- Эффективное общение.
- Более экономично создавать и переключать контекстные потоки.
- Потоки позволяют использовать многопроцессорные архитектуры с большим масштабом и эффективностью.
Типы ниток
Потоки реализуются следующими двумя способами:
-
Потоки уровня пользователя — управляемые пользователем потоки.
-
Потоки уровня ядра — управляемые потоки операционной системы, работающие на ядре, ядре операционной системы.
Потоки уровня пользователя — управляемые пользователем потоки.
Потоки уровня ядра — управляемые потоки операционной системы, работающие на ядре, ядре операционной системы.
Потоки уровня пользователя
В этом случае ядро управления потоками не знает о существовании потоков. Библиотека потоков содержит код для создания и уничтожения потоков, для передачи сообщений и данных между потоками, для планирования выполнения потоков и для сохранения и восстановления контекстов потоков. Приложение запускается с одного потока.
преимущества
- Переключение потоков не требует привилегий режима ядра.
- Поток пользовательского уровня может работать в любой операционной системе.
- Планирование может зависеть от приложения в потоке уровня пользователя.
- Потоки пользовательского уровня быстро создаются и управляются.
Недостатки
- В типичной операционной системе большинство системных вызовов блокируются.
- Многопоточное приложение не может использовать преимущества многопроцессорной обработки.
Потоки уровня ядра
В этом случае управление потоками осуществляется ядром. В области приложения нет кода управления потоками. Потоки ядра поддерживаются непосредственно операционной системой. Любое приложение может быть запрограммировано на многопоточность. Все потоки в приложении поддерживаются в рамках одного процесса.
Ядро поддерживает контекстную информацию для процесса в целом и для отдельных потоков внутри процесса. Планирование Ядром осуществляется на основе потоков. Ядро выполняет создание потоков, планирование и управление в пространстве ядра. Потоки ядра обычно медленнее создаются и управляются, чем пользовательские потоки.
преимущества
- Ядро может одновременно планировать несколько потоков из одного процесса на несколько процессов.
- Если один поток в процессе заблокирован, ядро может запланировать другой поток того же процесса.
- Сами подпрограммы ядра могут быть многопоточными.
Недостатки
- Потоки ядра обычно медленнее создаются и управляются, чем пользовательские потоки.
- Передача управления из одного потока в другой в рамках одного и того же процесса требует переключения режима в ядро.
Многопоточные модели
Некоторые операционные системы предоставляют объединенный поток уровня пользователя и средство потока уровня ядра. Solaris является хорошим примером такого комбинированного подхода. В комбинированной системе несколько потоков в одном приложении могут работать параллельно на нескольких процессорах, и блокирующий системный вызов не должен блокировать весь процесс. Многопоточные модели бывают трех типов
- Много ко многим отношениям.
- Много к одному отношения.
- Отношения один к одному.
Модель много ко многим
Модель «многие ко многим» мультиплексирует любое количество пользовательских потоков на равное или меньшее количество потоков ядра.
На следующей диаграмме показана модель многопоточности, при которой 6 потоков уровня пользователя мультиплексируются с 6 потоками уровня ядра. В этой модели разработчики могут создавать столько пользовательских потоков, сколько необходимо, и соответствующие потоки ядра могут работать параллельно на многопроцессорной машине. Эта модель обеспечивает наилучшую точность при параллельности, и когда поток выполняет системный вызов блокировки, ядро может запланировать выполнение другого потока.
Много к одной модели
Модель «многие к одному» отображает множество потоков уровня пользователя в один поток уровня ядра. Управление потоками осуществляется в пространстве пользователя библиотекой потоков. Когда поток выполняет системный вызов блокировки, весь процесс будет заблокирован. Только один поток может одновременно обращаться к Ядру, поэтому несколько потоков не могут работать параллельно на многопроцессорных системах.
Если библиотеки потоков пользовательского уровня реализованы в операционной системе таким образом, что система их не поддерживает, то потоки ядра используют режимы отношения «многие к одному».
Модель один на один
Существует взаимно-однозначное отношение потока уровня пользователя к потоку уровня ядра. Эта модель обеспечивает больше параллелизма, чем модель «многие к одному». Это также позволяет другому потоку запускаться, когда поток выполняет блокирующий системный вызов. Он поддерживает несколько потоков для параллельного выполнения на микропроцессорах.
Недостатком этой модели является то, что для создания пользовательского потока требуется соответствующий поток ядра. OS / 2, Windows NT и Windows 2000 используют модель отношений один к одному.