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