Автор работы: Пользователь скрыл имя, 31 Марта 2013 в 10:40, контрольная работа
Преимущества использования потоков
1. Упрощение программы в некоторых случаях, за счет использования общего адресного пространства.
2. Быстрота создания потока, по сравнению с процессом, примерно в 100 раз.
3. Повышение производительности самой программы, т.к. есть возможность одновременно выполнять вычисления на процессоре и операцию ввода/вывода. Пример: текстовый редактор с тремя потоками может одновременно взаимодействовать с пользователем, форматировать текст и записывать на диск резервную копию.
1. Общие характеристики потоков……………………………………….….3
2. Реализация потоков.………………………………………………………..5
3. Создание потоков………………………………………………………..…7
4. Завершение потока………………………………………………………..11
5. Заключение……………………………………………………………..…15
6. Список использованной литературы и источников………………...…..17
ПЛАН
Существуют разные определения термина «поток», в том числе «единица исполнения», «отдельный счетчик команд» или «подлежащая планированию сущность внутри процесса». Хотя каждое из этих определений по сути своей правильно, ни одно из них не является удовлетворительным. Что в точности подразумевается под «единицей исполнения»? Просто нечто, исполняемое процессором?
Поток (Thread) - это независимый путь выполнения внутри процесса, разделяющий вместе с процессом общее адресное пространство, код и глобальные данные.
В то время как процесс - это логическое представление работы, которую должна выполнить ОС, поток отображает одну из, возможно, многих необходимых подзадач.
Потоки делят между собой элементы своего процесса:
В многопользовательских системах, при каждом обращении к одному и тому же сервису, приходится создавать новый процесс для обслуживания клиента. Это менее выгодно, чем создать квазипараллельный поток внутри этого процесса с одним адресным пространством.
Преимущества использования потоков
1. Упрощение программы
в некоторых случаях, за счет
использования общего
2. Быстрота создания потока,
по сравнению с процессом,
3. Повышение производительности
самой программы, т.к. есть
Реализация потоков в пространстве пользователя и ядра. В случае А ядро о потоках ничего не знает. Каждому процессу необходима таблица потоков, аналогичная таблице процессов.
Преимущества случая А:
Недостатки случая А:
Особенности реализации Windows. Используется четыре понятия:
1. Задание - набор процессов с общими квотами и лимитами
2. Процесс
3. Поток
4. Волокно - облегченный поток, управляемый полностью в пространстве пользователя.
В исходном состоянии поток находится в приостановленном состоянии.
Основные составляющие потока в исполнительной системе таковы:
Регистры, стек и собственная область памяти называются контекстом (context) потока. Фактические данные, составляющие контекст потока, зависят от типа процессора.
Процесс Windows остается безжизненным, пока у него нет потока, который можно направить на выполнение. Если у процесса есть поток, последний может создать дополнительные потоки.
3. СОЗДАНИЕ ПОТОКОВ
При создании потока так же, как и при создании процесса, операционная система генерирует специальную информационную структуру - объект-поток, который содержит:
Создаются и уничтожаются потоки исполнительной системы Windows диспетчером объектов. Диспетчер процессов определяет тело объекта-потока и сервисы, используемые для работы с потоками после их создания. В табл. 1 описаны атрибуты потока.
Как можно заметить, некоторые атрибуты потока напоминают атрибуты объекта. Одни атрибуты, такие как процессорное средство потока и динамический приоритет, фактически усиливают, или ослабляют ограничения, заданные для процесса в целом. Например, процессорное средство каждого потока - это неполное подмножество (равно или меньше) процессорного средства процесса. Следовательно, можно заставить разные потоки процесса выполняться на разных группах процессоров.
Таблица 1 Атрибуты объекта-потока
Атрибут |
Назначение |
Идентификатор клиента |
Уникальное значение, идентифицирующее поток при вызове им сервера |
Контекст потока |
Набор значений регистров и других непостоянных данных, определяющих состояние выполнения потока |
Базовый приоритет |
Нижний предел динамического приоритета потока |
Динамический приоритет |
Приоритет потока на данный момент |
Процессорное сродство потока |
Набор процессоров, на которых может исполняться поток, (неполное) подмножество процессорного сродства процесса потока |
Время выполнения потока |
Общее время выполнения потока в пользовательском режиме и режиме ядра |
Статус оповещения |
Флаг, указывающий на необходимость отработки потоком асинхронного вызова процедуры (АРС) |
Счетчик приостановок |
Количество приостановок выполнения потока без последующего возобновления |
Маркер имперсонации |
Временный маркер доступа, позволяющий потоку выполнять действия от имени другого процесса (используется подсистемами) |
Порт завершения |
Канал коммуникации между процессами, в который диспетчер процессов посылает сообщение при завершении потока (используется подсистемами) |
Код завершения потока |
Причина завершения потока |
Аналогично, каждый поток
имеет базовый уровень
Создание потока в большей степени напоминает программу для Windows, чем создание процесса. Дело в том, что для создания потока используется функция CreateThread() (аналог WinMain()), одним из аргументов которой является указатель на функцию потока (аналог оконной функции). Для создания потока требуется следующая информация:
Функция CreateThread(). При вызове этой функции происходит следующее:
Синтаксис функции следующий:
Параметры:
Как и процесс, поток может быть завершен двумя способами - вызовом функции ExitThread() и обращением к функции TerminateThread(). Отличаются они друг от друга примерно тем же, что и функции ExitProcess() и TerminateProcess().
Функция ExitThread() используется для нормального завершения потока. Естественно, что она вызывается изнутри потока. Она описана в файле winbase.h следующим образом
VOID ExitThread(DWORD dwExitCode)
Параметр: dwExitCode - код завершения этой функции. Функцию TerminateThread() следует вызывать только в крайних случаях, когда поток завис, и ни на какие действия пользователя не реагирует. Функция вызывается из какого-либо внешнего (по отношению к завершаемому) потока, a ее аргументами являются хэндл завершаемого потока и двойное слово, в которое будет записан код завершения потока. Описание функции в файле winbase.h выглядит следующим образом,