Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ответы.doc
Скачиваний:
1
Добавлен:
30.08.2019
Размер:
260.1 Кб
Скачать
  1. Базовый приоритет процесса. Установка базового приоритета.

Windows поддерживает шесть классов приоритета.

Класс приоритета

Описание

Real-lime (реального времени)

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

High (высокий)

Потоки в этом процессе тоже должны немедленно реагировать на события, обеспечивая выполнение критических по времени задач.

Above normal (выше обычного)

Класс приоритета, промежуточный между normal и high

Normal (обычный)

Потоки в этом процессе не предъявляют особых требований к выделению им процессорного времени.

Below normal (ниже обычного)

Класс приоритета, промежуточный между normal и idle.

Idle (простаивающий)

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

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

Класс приоритета

Идентификатор

Real-time

RFALTIME_PRIORITY_CLASS

High

HIGH_PRIORITY_CLASS

Above normal

ABOVE_NORMAL_PRIORITY_CLASS

Normal

NORMAL_PRIORITY_CLASS

Below normal

BELOW_NORMAL_PRIORITY_CLASS

Idle

IDLE_PRIORITY_CLASS

В сис теме предусмотрена возможность изменения класса приоритета самим выполняемым процессом — вызовом функции SetPriontyClass

BOOL SetPriontyClass( HANDLE hProcess, DWORD fdwPriority);

Эта функция меняет класс приоритета процесса, определяемого описателем hProcess, в соответствии со значением параметра fdwPriority. Последний должен содержать одно из значений, указанных в таблице выше.

Парная ей функция GetPriorityClass позволяет узнать класс приоритета любого процесса.

DWORD GetPriorityClass(HANDLE hProcess);

Она возвращает один из ранее перечисленных флагов.

  1. Многопоточность. Достоинства и недостатки.

Поток (thread) определяет последовательность исполнения кода в процессе. При инициализации процесса система всегда создает первичный поток. Начинаясь со стартового кода из библиотеки C++, который в свою очередь вызывает входную функцию (WinMain, wWinMain, main или wmain) из программы, он живет до того момента, когда входная функция возвращает управление стартовому коду и тот вызывает функцию ExitProcess. Большинство приложений обходится единственным, первичным потоком. Однако процессы могут создавать дополнительные потоки, что позволяет им эффективнее выполнять свою работу.

Любой поток тоже состоит из двух компонентов:

  1. объекта ядра, через который операционная система управляет потоком. Там же хранится статистическая информация о потоке;

  2. стека потока, который содержит параметры всех функций и локальные переменные, необходимые потоку для выполнения кода.

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

Многопоточное приложение легче масштабируется. Каждый поток можно закрепить за определенным процессором. В каждом процессе есть хотя бы один поток.

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

Разработка пользовательского интерфейса в приложении. В подавляющем большинстве программ все компоненты пользовательского интерфейса (окна) обрабатываются одним и тем же потоком. И дочерние окна любого окна определенно должен создавать только один поток. Создание разных окон в разных потоках иногда имеет смысл, но такие случаи действительно редки. Обычно в приложении существует один поток, отвечающий за поддержку пользовательского интерфейса, — он создает все окна и содержит цикл GetMessage. Любые другие потоки в процессе являются рабочими (т. е. отвечают за вычисления, ввод-вывод и другие операции) и не создают никаких окон. Поток пользовательского интерфейса, как правило, имеет более высокий приоритет, чем рабочие потоки, — это нужно для того, чтобы он всегда быстро реагировал на действия пользователя.