Понятие информационных потоков
Контрольная работа, 31 Марта 2013, автор: пользователь скрыл имя
Краткое описание
Преимущества использования потоков
1. Упрощение программы в некоторых случаях, за счет использования общего адресного пространства.
2. Быстрота создания потока, по сравнению с процессом, примерно в 100 раз.
3. Повышение производительности самой программы, т.к. есть возможность одновременно выполнять вычисления на процессоре и операцию ввода/вывода. Пример: текстовый редактор с тремя потоками может одновременно взаимодействовать с пользователем, форматировать текст и записывать на диск резервную копию.
Содержание работы
1. Общие характеристики потоков……………………………………….….3
2. Реализация потоков.………………………………………………………..5
3. Создание потоков………………………………………………………..…7
4. Завершение потока………………………………………………………..11
5. Заключение……………………………………………………………..…15
6. Список использованной литературы и источников………………...…..17
Содержимое работы - 1 файл
моя работа в 2007.docx
— 38.77 Кб (Скачать файл)BOOL TerminateThread(HANDLE hThread, DWORD dwExitCode);
Параметры:
- hThread - хэндл объекта завершаемого процесса.
- dwExitCode - код завершения процесса.
Возвращаемое значение: если выполнение завершения произошло удачно, то TRUE, иначе - FALSE.
При завершении потока выполняются следующие действия.
- Освобождаются или удаляются все занятые или созданные объекты. Действие является стандартным и ничего особенного собой не представляет.
- Поток получает статус незанятого (signaled).
- Код завершения процесса меняется со STILL_ACTIVE на указанный при вызове завершающей поток функции.
- Уменьшается счетчик пользователей потока. Если пользователей потока больше не осталось, и поток является единственным потоком процесса, то завершается и процесс.
Момент выборки потока на выполнение осуществляется в соответствии с принятым в данной системе правилом предоставления процессорного времени и с учетом всех существующих в данный момент потоков и процессов.
По сравнению с Windows NT 4 в интерфейс Win32 API было введено, новое понятие волокон. Под волокном (fiber) понимается упрощенный поток, выполнение которого планируется в приложении вручную. Волокна выполняются в контексте потоков, в которых планируется их применение, и допускают полную их идентификацию с потоками.
Суть: потоки работают в режиме пользователя, но при системных вызовах переключаются в режим ядра. Из-за переключения в режим ядра и обратно, очень замедляется работа системы. Поэтому было введено понятие волокна.
В каждом потоке может быть
запланировано несколько
Благодаря тому, что волокно
допускает сходство с родительским
потоком, оно разделяет вместе с
потоком общую локальную
Основное отличие между потоками и волокнами состоит в том, что волокна не планируются с вытеснением. Волокно должно планироваться в приложении путем переключения на него из другого волокна. Однако система все-таки планирует потоки, которые создают волокна, поэтому поток, который в настоящий момент выполняет волокно, может подлежать вытеснению. Волокно возобновляет свое выполнение, когда возобновляется выполнение его потока.
Перед планированием в приложении первого волокна для создания области, в которой сохраняется информация состояния волокна, вызывается функция ConvertThreadToFiber(). При этом поток превращается в выполняемое в настоящий момент волокно. К хранимой информации состояния этого волокна относятся также и данные, переданные функции ConvertThreadToFiber() в ее аргументе.
LPVOID ConvertThreadToFiber (LPVOID lpParameter).
Параметры:
- lpParameter - единственная переменная, которая передается волокну.
- Волокно выбирает ее значение, используя функцию GetFiberData().
- Возвращаемое значение: если выполнение завершения произошло удачно, то возвращается адрес волокна, иначе - NULL.
Для создания волокон в приложении применяется функция CreateFiber(). LPVOID CreateFiber (DWORD dwStackSize, LPFIBER_START_ROUTINE lpStartAdress, LPVOID lpParameter)
Параметры:
- dwStackSize - размер стека волокна в байтах;
- lpStartAdress - указатель на определяемую приложением функцию, которая выполняется волокном и задает начальный адрес волокна. Выполнение вновь созданного волокна не начинается до тех пор, пока другое волокно не вызовет функцию SwitchToFiber() по данному адресу.
- lpParameter - единственная переменная, которая передается волокну. Волокно выбирает ее значение, используя функцию GetFiberData().
- Возвращаемое значение: если выполнение завершения произошло удачно, то возвращается адрес волокна, иначе - NULL.
- Начальный адрес, как правило, указывается для предоставляемой пользователем функции, называемой также функцией волокна (Fiber function). Эта функция обратного вызова имеет синтаксис VOID WINAPI FiberFunc (PVOID lpParameter), и воспринимает только один параметр, которым являются данные волокна, и не возвращает значение. Если же функция волокна возвращает значение, осуществляется выход из потока, выполняющей данное волокно. Для выполнения любого волокна, созданного с помощью функции CreateFiber(), в приложении применяется функция SwitchToFiber(), синтаксис которой следующий VOID SwitchToFiber (LPVOID lpFiber),
Параметры:
- lpFiber - адрес запускаемого волокна.
- Возвращаемое значение: не имеет.
В функции SwitchToFiber() используется адрес волокна, созданного другим потоком, причем этот адрес получен другим потоком в результате обращения к CreateFiber(). После того как поток завершит выполнение своего волокна, она должна вызвать функцию DeteteFiber(), чтобы очистить данные, созданные для волокна. Синтаксис функции следующий:
VOID DeteteFiber (LPVOID lpFiber),
Параметры:
- lpFiber - адрес удаляемого волокна.
- Возвращаемое значение: не имеет.
- Не следует удалять волокно, созданное другим потоком, поскольку это может привести к аварийному завершению другого потока.
ЗАКЛЮЧЕНИЕ
Информационных поток - это независимый путь выполнения внутри процесса, разделяющий вместе с процессом общее адресное пространство, код и глобальные данные.
Преимущества использования потоков
1. Упрощение программы
в некоторых случаях, за счет
использования общего
2. Быстрота создания потока,
по сравнению с процессом,
3. Повышение производительности
самой программы, т.к. есть
Создаются и уничтожаются потоки исполнительной системы Windows диспетчером объектов. Диспетчер процессов определяет тело объекта-потока и сервисы, используемые для работы с потоками после их создания.
Для создания потока требуется следующая информация:
- Размер стека потока.
- Атрибуты защиты потока.
- Адрес процедуры, с которой начинается выполнение. Это должна быть функция, которая получает в качестве единственного параметра 32-разрядное значение.
- Дополнительное 32-разрядное значение, которое передается в процедуру потока.
- Флаги, которые, помимо прочего, допускают установку уровня приоритета потока.
- Адрес для хранения идентификатора потока.
Потоки могут быть завершены двумя способами - вызовом функции ExitThread() и обращением к функции TerminateThread(). Функция ExitThread() используется для нормального завершения потока. Естественно, что она вызывается изнутри потока. Параметр: dwExitCode - код завершения этой функции. Функцию TerminateThread() следует вызывать только в крайних случаях, когда поток завис, и ни на какие действия пользователя не реагирует.
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ И ИСТОЧНИКОВ
- Вендров, А.М. Проектирование программного обеспечения экономических информационных систем [Текст] / А.М. Вендров. – М. – Финансы и статистика, 2006. – 352 с.
- Вендров A.M. CASE-технология. Современные методы и средства проектирования информационных систем. – М.: Финансы и статистика, 2003. – 429 с.
- Диязитдинова А.Р., Матвеева Е.А., Симагина С.Г. Информационные системы и технологии: история развития, проектирование, защита- Самара: ООО «Офорт», 2006. – 193с.
- Корнейчук, Б. В. Информационная экономика : учебное пособие / Б. В. Корнейчук. - СПб.: Питер , 2006. – 394 с.
- Смирнова, Г. Н. Проектирование экономических информационных систем : Учебник / Г. Н. Смирнова, А. А. Сорокин, Ю. Ф. Тельнов; Под ред. Ю. Ф. Тельнова.-М. : Финансы и статистика, 2002. – 510 с.