743
Планирование.и.приоритеты.потоков
ПриМеЧание
Концепция.классов.приоритета.процесса.может.навести.на.мысль,.что.Windows.
каким-то.образом.управляет.очередностью.процессов .Но.очередность.операцион-
ная.система.определяет.только.для.потоков .Класс.приоритета.процесса.является.
абстрактным.понятием,.помогающим.логически.сопоставить.относительную.важность.
одного.запущенного.приложения.с.остальными;.никаких.других.функций.у.него.нет
ВниМание
Лучше.снизить.приоритет.одного.потока,.чем.повысить.приоритет.другого .Обычно.
понижение.приоритета.требуется,.если.поток.выполняет.длительные.вычисления,.
например.компилирует.код,.проверяет.орфографию,.пересчитывает.электронные.
таблицы.и.т .п .Повышать.приоритет.имеет.смысл,.если.поток.должен.быстро.отреа-
гировать.на.какое-то.событие,.запуститься.на.короткий.промежуток.времени.и.вер-
нуться.в.состояние.ожидания .Потоки.с.высоким.приоритетом.большую.часть.своего.
существования.находятся.в.режиме.ожидания,.не.влияя.на.быстродействие.всей.
системы .В.качестве.примера.потока.с.высоким.приоритетом.можно.упомянуть.поток.
Проводника.Windows.(Windows.Explorer),.отслеживающий.нажатие.клавиши.Windows.
пользователем .Проводник.приостанавливает.потоки.с.более.низким.приоритетом.
и.немедленно.выводит.на.экран.меню .В.процессе.навигации.поток.Проводника.
Windows.быстро.отвечает.на.нажатия.клавиш,.обновляет.меню.и.приостанавливается.
до.следующего.нажатия.клавиши.пользователем
Обычно процесс получает класс приоритета в зависимости от того, каким про-
цессом он был запущен. Большинство процессов инициируются Проводником
Windows, присваивающим всем своим потомкам класс приоритета
Normal
. Управ-
ляемые приложения не могут владеть своими процессами, они запускаются в домене.
Именно поэтому они не могут менять класс приоритета процесса, ведь это окажет
влияние на весь запущенный в процессе код. К примеру, многие приложения ASP.
NET выполняются в одном процессе, хотя каждое из них работает в собственном
домене приложений. То же самое можно сказать о приложениях Silverlight, запу-
скаемых в процессе интернет-браузера, или управляемых хранимых процедурах,
запускаемых внутри процесса Microsoft SQL Server.
В то же время приложение может менять относительный приоритет своих
потоков при помощи свойства
Priority
класса
Thread
, которому присваивается
одно из пяти значений (
Lowest
,
BelowNormal
,
Normal
,
AboveNormal
или
Highest
),
определенных в перечислении
ThreadPriority
. При этом точно так же, как
Windows резервирует для себя нулевой уровень и уровень реального времени, CLR
резервирует уровни приоритета
Idle
и
Time-Critical
. В настоящее время в CLR
отсутствуют потоки с уровнем приоритета
Idle
, но в будущем ситуация может по-
меняться. При этом поток финализации, о котором шла речь в главе 21, исполняется
на уровне приоритета
Time-Critical
. Соответственно, разработчикам управляемых
приложений остаются пять приоритетов потока: в табл. 26.1 это строки со второй
(
Highest
) по шестую (
Lowest
).
Do'stlaringiz bilan baham: |