Понятие информационных потоков

Автор работы: Пользователь скрыл имя, 31 Марта 2013 в 10:40, контрольная работа

Краткое описание

Преимущества использования потоков
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);

Параметры:

  1. hThread - хэндл объекта завершаемого процесса.
  2. dwExitCode - код завершения процесса.

Возвращаемое значение: если выполнение завершения произошло удачно, то TRUE, иначе - FALSE.

При завершении потока выполняются  следующие действия.

  1. Освобождаются или удаляются все занятые или созданные объекты. Действие является стандартным и ничего особенного собой не представляет.
  2. Поток получает статус незанятого (signaled).
  3. Код завершения процесса меняется со STILL_ACTIVE на указанный при вызове завершающей поток функции.
  4. Уменьшается счетчик пользователей потока. Если пользователей потока больше не осталось, и поток является единственным потоком процесса, то завершается и процесс.

Момент выборки потока на выполнение осуществляется в соответствии с принятым в данной системе правилом предоставления процессорного времени  и с учетом всех существующих в  данный момент потоков и процессов.

По сравнению с Windows NT 4 в интерфейс Win32 API было введено, новое  понятие волокон. Под волокном (fiber) понимается упрощенный поток, выполнение которого планируется в приложении вручную. Волокна выполняются в  контексте потоков, в которых  планируется их применение, и допускают  полную их идентификацию с потоками.

Суть: потоки работают в режиме пользователя, но при системных вызовах  переключаются в режим ядра. Из-за переключения в режим ядра и обратно, очень замедляется работа системы. Поэтому было введено понятие  волокна.

В каждом потоке может быть запланировано несколько волокон. Волокна не дают никакого преимущества, по сравнению с корректно разработанным  мультипоточным приложением, однако они  упрощают перенос приложений, которые  были специально разработаны для  планирования собственных потоков.

Благодаря тому, что волокно  допускает сходство с родительским потоком, оно разделяет вместе с  потоком общую локальную память, а если волокно вызывает функции, которые, как правило, оказывают  влияние на поток, в частности, ExitThread(), тогда эти функции выполняются  и для потока. Например, если волокно  обращается к функции ExitThread(), то в  этом случае выполняется выход из потока, который создал это волокно. Однако у волокна отсутствует  информация о состоянии, которая  с ним связана и аналогична таковой, но связанной с потоком. Единственная информация о состоянии  волокна сохраняется в его  стеке, представляющем собой подмножество регистров, которые, как правило, сохраняются между вызовами функций, К этой же информации можно отнести и данные о волокне, предоставляемые, во время его создания.

Основное отличие между  потоками и волокнами состоит  в том, что волокна не планируются  с вытеснением. Волокно должно планироваться  в приложении путем переключения на него из другого волокна. Однако система все-таки планирует потоки, которые создают волокна, поэтому  поток, который в настоящий момент выполняет волокно, может подлежать  вытеснению. Волокно возобновляет свое выполнение, когда возобновляется выполнение его потока.

Перед планированием в  приложении первого волокна для  создания области, в которой сохраняется  информация состояния волокна, вызывается функция ConvertThreadToFiber(). При этом поток  превращается в выполняемое в  настоящий момент волокно. К хранимой информации состояния этого волокна  относятся также и данные, переданные функции ConvertThreadToFiber() в ее аргументе.

LPVOID ConvertThreadToFiber (LPVOID lpParameter).

Параметры:

  1. lpParameter - единственная переменная, которая передается волокну.
  2. Волокно выбирает ее значение, используя функцию GetFiberData().
  3. Возвращаемое значение: если выполнение завершения произошло удачно, то возвращается адрес волокна, иначе - NULL.

Для создания волокон в  приложении применяется функция CreateFiber(). LPVOID CreateFiber (DWORD dwStackSize, LPFIBER_START_ROUTINE lpStartAdress, LPVOID lpParameter)

Параметры:

  1. dwStackSize - размер стека волокна в байтах;
  2. lpStartAdress - указатель на определяемую приложением функцию, которая выполняется волокном и задает начальный адрес волокна. Выполнение вновь созданного волокна не начинается до тех пор, пока другое волокно не вызовет функцию SwitchToFiber() по данному адресу.
  3. lpParameter - единственная переменная, которая передается волокну. Волокно выбирает ее значение, используя функцию GetFiberData().
  4. Возвращаемое значение: если выполнение завершения произошло удачно, то возвращается адрес волокна, иначе - NULL.
  5. Начальный адрес, как правило, указывается для предоставляемой пользователем функции, называемой также функцией волокна (Fiber function). Эта функция обратного вызова имеет синтаксис VOID WINAPI FiberFunc (PVOID lpParameter), и воспринимает только один параметр, которым являются данные волокна, и не возвращает значение. Если же функция волокна возвращает значение, осуществляется выход из потока, выполняющей данное волокно. Для выполнения любого волокна, созданного с помощью функции CreateFiber(), в приложении применяется функция SwitchToFiber(), синтаксис которой следующий VOID SwitchToFiber (LPVOID lpFiber),

Параметры:

  1. lpFiber - адрес запускаемого волокна.
  2. Возвращаемое значение: не имеет.

В функции SwitchToFiber() используется адрес волокна, созданного другим потоком, причем этот адрес получен другим потоком в результате обращения  к CreateFiber(). После того как поток  завершит выполнение своего волокна, она  должна вызвать функцию DeteteFiber(), чтобы  очистить данные, созданные для волокна. Синтаксис функции следующий:

VOID DeteteFiber (LPVOID lpFiber),

Параметры:

  1. lpFiber - адрес удаляемого волокна.
  2. Возвращаемое значение: не имеет.
  3. Не следует удалять волокно, созданное другим потоком, поскольку это может привести к аварийному завершению другого потока.

ЗАКЛЮЧЕНИЕ

 

Информационных поток - это независимый путь выполнения внутри процесса, разделяющий вместе с процессом общее адресное пространство, код и глобальные данные.

Преимущества использования  потоков

1. Упрощение программы  в некоторых случаях, за счет  использования общего адресного  пространства.

2. Быстрота создания потока, по сравнению с процессом, примерно  в 100 раз.

3. Повышение производительности  самой программы, т.к. есть возможность  одновременно выполнять вычисления  на процессоре и операцию ввода/вывода. Пример: текстовый редактор с  тремя потоками может одновременно  взаимодействовать с пользователем,  форматировать текст и записывать  на диск резервную копию.

Создаются и уничтожаются потоки исполнительной системы Windows диспетчером  объектов. Диспетчер процессов определяет тело объекта-потока и сервисы, используемые для работы с потоками после их создания.

Для создания потока требуется  следующая информация:

  1. Размер стека потока.
  2. Атрибуты защиты потока.
  3. Адрес процедуры, с которой начинается выполнение. Это должна быть функция, которая получает в качестве единственного параметра 32-разрядное значение.
  4. Дополнительное 32-разрядное значение, которое передается в процедуру потока.
  5. Флаги, которые, помимо прочего, допускают установку уровня приоритета потока.
  6. Адрес для хранения идентификатора потока.

Потоки могут быть завершены двумя способами - вызовом функции ExitThread() и обращением к функции TerminateThread(). Функция ExitThread() используется для нормального завершения потока. Естественно, что она вызывается изнутри потока. Параметр: dwExitCode - код завершения этой функции. Функцию TerminateThread() следует вызывать только в крайних случаях, когда поток завис, и ни на какие действия пользователя не реагирует.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ И ИСТОЧНИКОВ

 

  1. Вендров, А.М. Проектирование программного обеспечения экономических информационных систем [Текст] / А.М. Вендров. – М. – Финансы и статистика, 2006. – 352 с.
  2. Вендров A.M. CASE-технология. Современные методы и средства проектирования информационных систем. – М.: Финансы и статистика, 2003. – 429 с.
  3. Диязитдинова А.Р., Матвеева Е.А., Симагина С.Г. Информационные системы и технологии: история развития, проектирование, защита- Самара: ООО «Офорт», 2006. – 193с.
  4. Корнейчук, Б. В. Информационная экономика : учебное пособие / Б. В. Корнейчук. - СПб.: Питер , 2006. – 394 с.
  5. Смирнова, Г. Н. Проектирование экономических информационных систем : Учебник / Г. Н. Смирнова, А. А. Сорокин, Ю. Ф. Тельнов; Под ред. Ю. Ф. Тельнова.-М. : Финансы и статистика, 2002. – 510 с.

 


Информация о работе Понятие информационных потоков