Определение потока
Определение потока тесно связано с последовательностью действий процессора во время исполнения программы. Исполняя программу, процессор последовательно выполняет инструкции программы, иногда осуществляя переходы в зависимости от некоторых условий.
Такая последовательность выполнения инструкций программы называется потоком управления внутри программы.
Поток управления зависит от начального состояния переменных, которые используются в программе. В общем случае различные исходные данные порождают различные потоки управления. Поток управления можно представить как нить в программе, на которую нанизаны инструкции, выполняемые микропроцессором. Поэтому часто поток управления также называется нитью (thread). В русскоязычной литературе за потоком управления закрепилось название поток.
Программа является многопоточной, если в ней может одновременно существовать несколько потоков. Сами потоки называются параллельными. Если в программе одновременно может существовать только один поток, то программа называется однопоточной.
Состояния потока
Поток описывает динамическое поведение всей программы или какой-либо функции в программе. Если программа является однопоточной, то поток можно рассматривать как пару: поток = (процессор, программа).
Программа может исполняться процессором только в том случае, если она готова к исполнению. То есть все системные ресурсы, которые необходимы для исполнения этой программы, свободны для использования. Кроме того, для исполнения программы необходимо, чтобы и сам процессор был свободен и готов к исполнению этой программы.
Таким образом процессор и программа могут находиться в следующих состояниях.
Состояния процессора:
- не выделен для исполнения программы;
- выделен для исполнения программы.
Состояния программы:
- не готова к исполнению процессором;
- готова к исполнению процессором.
Состояния потока:
- блокирован = (не выделен, не готова)
- готов к выполнению = (не выделен, готова)
- выполняется = (выделен, готова)
- новый – поток, еще не начавший свою работу
- завершен – поток, завершивший свою работу
Особенности потоков в WinAPI
Потоком в Win API называется объект ядра (или последовательность инструкций программы), которому ОС выделяет процессорное время для выполнения приложения.
Потоку принадлежат ресурсы:
- код исполняемой функции;
- набор регистров процессора;
- стек для работы приложения;
- стек для работы операционной системы;
- маркер доступа, который содержит информацию для системы безопасности.
Все эти ресурсы (или содержимое памяти) образуют контекст потока в Win API .
Поток имеет дескриптор и идентификатор, который уникален для потоков выполняющихся в системе. Идентификаторы потоков используются служебными программами, которые позволяют пользователям системы отслеживать работу потоков.
В ОС Windows различаются потоки двух типов:
- системные потоки – выполняют различные сервисы операционной системы и запускаются ядром операционной системы;
- пользовательские потоки – служат для решения задач пользователя и запускаются приложением.
В работающем приложении имеются потоки двух типов:
- рабочие потоки (working threads) – выполняют различные фоновые задачи в приложении;
- потоки интерфейса пользователя (user interface threads) – связаны с окнами и выполняют обработку сообщений, поступающих этим окнам.
Каждое приложение имеет, по крайней мере, один поток, который называется первичным (primary) или главным (main) потоком - поток, который исполняет функцию main или WinMain . |