Предостережение относительно использования приоритетов потоков и процессов

Предостережение относительно использования приоритетов потоков и процессов

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

Не считая того, приводимые в следующих главах выражения относительно правильности многопоточных программ справедливы только при условии соблюдения принципа равноправия (fairness) потоков. Равноправие потоков значит, что они все, в конечном счете, будут производиться. Если не соблюдать этот принцип, то потоки с более низким ценностью сумеют задерживать ресурсы, нужные потокам, имеющим Предостережение относительно использования приоритетов потоков и процессов более высочайший ценность. При описании недочетов планирования, осуществляемого с нарушением принципа равноправия, употребляют определения зависание потоков (thread starvation) и инверсия ценностей (priority inversion).

Состояния потоков

На рис. 7.4, взятом из [9] (см. также [38], версию, освеженную Соломоном (Solomon) и Руссиновичем (Russinovych)), представлена схема планирования потоков и показаны их вероятные состояния. Не считая Предостережение относительно использования приоритетов потоков и процессов того, этот набросок иллюстрирует результаты работы программки. Такие диаграммы состояния являются общими для всех многозадачных ОС и помогают узнать, каким образом планируется выполнение потоков и как они перебегают из 1-го состояния в другое.

Рис. 7.4. Состояния потоков и переходы меж состояниями (Источник: Inside Windows NT, Copyright © 1993, by Helen Предостережение относительно использования приоритетов потоков и процессов Custer. Copyright Microsoft Press. Воспроизводится с разрешения Microsoft Press. Все права сохранены.)

Ниже приводится короткая сводка главных положений. Для получения более подробной инфы по этому вопросу обратитесь в [38] либо к управлению по ОС.

• Поток находится в состоянии выполнения (running state), если она практически производится микропроцессором. В SMP-системах в состоянии выполнения Предостережение относительно использования приоритетов потоков и процессов могут находиться сразу несколько потоков.

• Планировщик переводит поток в состояние ожидания (wait state), если он делает функцию ожидания несигнализирующих объектов, к примеру, потоков либо процессов, либо перехода в сигнальное состояние объектов синхронизации, о чем говорится в главе 8. Операции ввода/вывода также будут ждать окончания передачи дисковых либо других данных, но Предостережение относительно использования приоритетов потоков и процессов ожидание может быть вызвано и другими бессчетными функциями. О потоках, находящихся в состоянии ожидания, часто молвят как о блокированных (blocked) либо спящих (sleeping).

• Поток находится в состоянии готовности (ready state), если она может производиться. Планировщик в хоть какой момент может перевести таковой поток в состояние выполнения. Когда микропроцессор Предостережение относительно использования приоритетов потоков и процессов станет легкодоступным, планировщик запустит тот из потоков, находящихся в состоянии готовности, который обладает наивысшим ценностью, а при наличии нескольких потоков с схожим высшим ценностью запущен будет та, который пребывал в состоянии готовности подольше всех. При всем этом поток проходит через состояние простоя (standby state), либо запасное состояние Предостережение относительно использования приоритетов потоков и процессов.

• Обычно, в согласовании с приведенным описанием, планировщик помещает поток, находящийся в состоянии готовности, на хоть какой доступный микропроцессор. Программер может указать маску родства микропроцессоров (processor affinity mask) для потока (см. главу 9), предоставляя сгустку микропроцессоры, на которых он может производиться. Используя этот метод, программер может распределять микропроцессоры меж потоками. Надлежащими функциями Предостережение относительно использования приоритетов потоков и процессов являются SetProcessorAffinityMask и GetProcessorAffinityMask. Функция SetThreadIdealProcessor позволяет указать желательный микропроцессор, подлежащий использованию планировщиком при первой же способности.

• После истечения кванта времени, отведенного выполняющемуся сгустку, планировщик без ожидания переводит его в состояние готовности. В итоге выполнения функции Sleep(0) поток также будет переведен из состояния выполнения в состояние готовности.

• Планировщик переводит ожидающий поток Предостережение относительно использования приоритетов потоков и процессов в состояние готовности сразу, как надлежащие дескрипторы оказываются в сигнальном состоянии, хотя при всем этом поток практически проходит через промежуточное переходное состояние (transition state). В схожих случаях принято гласить о том, что поток просыпается (wakes).

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

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

• Поток перебегает в состояние окончания (terminated state) тогда Предостережение относительно использования приоритетов потоков и процессов, когда его выполнение заканчивается, и остается в этом состоянии до того времени, пока остается открытым хотя бы один из ее дескрипторов. Это позволяет другим потокам запрашивать состояние данного потока и его код окончания.


predostavlyaemih-byudzhetnomu-i-avtonomnomu-uchrezhdeniyam.html
predostavlyaemih-zaemshikom-yuridicheskim-licom.html
predostavlyayutsya-otcheti-pedagoga-o-kontingente-uchashihsya.html