Создание многопоточных приложений. Копытин А.В - 10 стр.

UptoLike

Составители: 

10
Приоритеты и составление расписания
Как упоминалось ранее, операционная система отвечает за выделение
каждому потоку нескольких циклов процессора, в течение которых они могут
работать . Количество времени , выделяемое отдельному потоку, зависит от
назначаемого ему приоритета . Общий приоритет отдельного потока
определяется путем объединения приоритета процесса, породившего поток (он
называется классом приоритета), и приоритета самого потока, который
называется относительным приоритетом.
Win32 поддерживает четыре класса: Idle, Normal, High и Realtime, которые
описывают приоритет отдельного процесса, запущенного в системе. По умол-
чанию любому процессу присваивается класс Normal. Каждый из перечислен-
ных классов имеет соответствующий признак , определенный в модуле
Windows. Для порождения процесса с определенным приоритетом можно логи-
чески сложить (с помощью операции OR) любой из этих признаков с парамет-
ром dwCreationFlags функции CreateProcess. Все классы можно предста -
вить уровнями приоритета , которые выражаются числовыми значениями, ле -
жащими в диапазоне от 4 до 24 включительно . В табл. 1 приведены все приори -
тетные классы , соответствующие им признаки и числовые значения.
Таблица 1. Классы приоритетов процессов
Класс Признак Значение
Idle IDLE_PRIORITY_CLASS 4
Normal NORMAL_PRIORITY_CLASS 7-9
High HIGH_PRIORITY_CLASS 13
Realtime REALTIME_PRIORITY_CLASS 24
В большинстве случаев следует избегать установки приоритетного класса
любого процесса равным Realtime. Поскольку большинство потоков операци-
онных систем работает в приоритетном классе, который ниже, чем Realtime, то
ваш поток может получить больше процессорного времени , чем сама операци-
онная система, а это может вызвать некоторые неожиданные проблемы .
Даже неоправданная установка приоритетного класса равным High может
вызвать проблемы , если потоки процесса не тратят большую часть времени на
простои или на ожидание внешних событий (например, ввода- вывода). Один
высокоприоритетный поток будет отбирать все процессорное время у низко -
приоритетных потоков и процессов до тех пор, пока он или не заблокирует ка-
кое-нибудь событие, или не перейдет в состояние ожидания, или не займется
обработкой сообщений. Преимущества многозадачности могут быть легко пе-
речеркнуты неправильным назначением приоритетов.
Второй составляющей , которая входит в определение общего приоритета по -
тока, является относительный приоритет отдельного потока. Следует под-
черкнуть , что приоритетный класс связан с процессом, а относительный при -
оритет с отдельными потоками внутри процесса. Потоку можно назначить
один из семи возможных относительных приоритетов: Idle (ожидания), Lowest
                                          10
П ри ори т ет ы и с ос т авлен и е рас п и с ан и я
   К ак упо минало сь ранее, о перацио нная система о твечает за вы деление
каж до му по току неско льких цикло в про ц ессо ра, в течение ко торы х о ни мо гут
рабо тать. Ко личество времени, вы деляемо е о тдельно му по току, зависит о т
назначаемо го ему прио ритета. О бщ ий прио ритет о тдельно го по тока
о пределяется путем о бъ единения прио ритетапро цесса, по ро дивш его по ток (о н
назы вается клас с ом пр иор ит ет а), и прио ритета само го по тока, ко торы й
назы вается от нос ит ельны м пр иор ит ет ом .
Win32 по ддерж иваетчеты рекласса: Idle, Normal, High и Realtime, ко торы е
о писы ваю тприо ритето тдельно го про цесса, запущ енно го всистеме. П о умо л-
чанию лю бо мупро цессуприсваивается классNormal. Каж ды й из перечислен-
ны х классо вимеетсо о тветствую щ ий признак, о пределенны й вмо дуле
Windows. Д ля по ро ж дения про цессасо пределенны м прио ритетом мо ж но ло ги-
чески сло ж ить(спо мо щ ью о перации OR) лю бо й из этих признако вспарамет-
ро м dwCreationFlags функции CreateProcess. В се классы мо ж но предста-
витьуро внями прио ритета, ко торы евы раж аю тся число вы ми значениями, ле-
ж ащ ими вдиапазо нео т4 до 24 вклю чительно . В табл. 1 приведены всеприо ри-
тетны е классы , со о тветствую щ ие им признаки и число вы е значения.
                                      Таб ли ца1. Клас с ы п ри ори т ет ов п роцес с ов
       Клас с                          П ри зн ак                      Зн ачен и е
Idle                 IDLE_PRIORITY_CLASS                           4
Normal               NORMAL_PRIORITY_CLASS                         7-9
High                 HIGH_PRIORITY_CLASS                           13
Realtime             REALTIME_PRIORITY_CLASS                       24


   В бо льш инстве случаев следуетизбегать устано вки прио ритетно го класса
лю бо го про ц есса равны м Realtime. П о ско льку бо льш инство по токо в о пераци-
о нны х систем рабо таетв прио ритетно м классе, ко торы й ниж е, чем Realtime, то
ваш по ток мо ж етпо лучить бо льш е про цессо рно го времени, чем сама о пераци-
о нная система, аэто мо ж етвы зватьнеко торы енео ж иданны епро блемы .
   Д аж е нео правданная устано вка прио ритетно го класса равны м High мо ж ет
вы звать про блемы , если по токи про цесса не тратятбо льш ую часть времени на
про стои или на о ж идание внеш них со бы тий (например, вво да-вы во да). О дин
вы со ко прио ритетны й по ток будето тбирать все про цессо рно е время у низко -
прио ритетны х по токо в и про цессо в до тех по р, по ка о н или не забло кируетка-
ко е-нибудь со бы тие, или не перейдетв со стояние о ж идания, или не займется
о брабо тко й со о бщ ений. П реимущ ества мно го задачно сти мо гутбы ть легко пе-
речеркнуты неправильны м назначением прио ритетов.
   В торо й со ставляю щ ей, ко торая вх о дитв о пределение о бщ его прио ритетапо -
тока, является от нос ит ельны й пр иор ит ет о тдельно го по тока. С ледуетпо д-
черкнуть, что прио ритетны й класс связан с про цессо м, а о тно сительны й при-
о ритет– с о тдельны ми по токами внутри про цесса. П о току мо ж но назначить
о дин из семи во змо ж ны х о тно сительны х прио ритетов: Idle (о ж идания), Lowest