Windows NT 6.1 использует модель вытесняющей многопоточности. Когда запускается приложение, стартует процесс, в нем могут выполнять свою работу один или несколько потоков, все они разделяют общую память и общее адресное пространство. Поток же, в свою очередь, — это обособленная последовательность команд, выполняемая независимо.
Существует три вида потоков:
Создание потока протекает в три этапа. Сначала происходит его описание с помощью поточного API, затем на стадии выполнения этот вызов обрабатывается как вызов ядра, в результате создается поток, потом он выполняется внутри своего процесса.
Но в связи с тем, что в программе одновременно выполняется несколько действий, может возникнуть куча проблем. Их удобно классифицировать под четыре типа.
Существует три вида потоков:
- пользовательского уровня — создается в пользовательской программе (на уровне пользователя).
Эти потоки в Windows NT проецируются на потоки уровня ядра, так их видит процессор(Ни о каких потоках процессор не знает вообще! У процессора есть контекст исполнения (состояние регистров) и оперативная память. Загрузили программу в память, установили регистры - пошло выполнение. Пришло прерывание - посмотрела ОС, что пора переключать, сохранила контекст, загрузила новый - пошло исполнение другого потока. Такого объекта, как "поток", на уровне процессора не существует. А проецируются друг на друга структуры в памяти, т.е. чисто искусственные образования ОС.); - поток ядра — управляется ядром операционной системы;
- аппаратный поток — единица, исполняемая на процессоре.
Создание потока протекает в три этапа. Сначала происходит его описание с помощью поточного API, затем на стадии выполнения этот вызов обрабатывается как вызов ядра, в результате создается поток, потом он выполняется внутри своего процесса.
Но в связи с тем, что в программе одновременно выполняется несколько действий, может возникнуть куча проблем. Их удобно классифицировать под четыре типа.
- Проблема синхронизации возникает, когда один поток ждет выполнения другого, который по каким-то причинам не может завершить выполнение.
- При проблеме взаимодействия один поток не может вовремя передать информацию другому, например из-за задержек.
- Когда один поток напрягается, а другой прохлаждается, возникает проблема балансировки.
- Если в момент переноса программы на более мощный компьютер ее быстродействие не повышается, то говорят о проблеме масштабируемости.
Для решения всех этих проблем предназначены примитивы для работы в многопоточной среде.