144
ГЛАВА 3. ПРОГРАММИРОВАНИЕ С ПТИЧЬЕГО ПОЛЕТА
разные системы приоритетов, причем во втором случае система приоритетов
вынуждено оказывается динамической.
На практике обычно используют жесткую дисциплину, базирующуюся на
порядке операторов в программе. Часто управление по приоритетам соеди-
няется с т. н. системой демонов, т. е. процедур, вызываемых при выполне-
нии некоторого условия, а не в тот момент, когда при движении по тексту
программы мы подошли к их явному вызову (сидит такой демон в засаде и
выжидает момент, когда можно будет начать исполняться). И текущий «нор-
мальный» процесс, и проснувшиеся демоны имеют свои приоритеты, и де-
мон начнет исполняться, даже если он активизирован, лишь в том случае,
если среди активных не осталось процесса с большим, чем у демона, прио-
ритетом. Эта схема реализована, в частности, в системе
UNIX
.
Уместно отметить, что событийно-ориентированное программирование
с обособленными реакциями (см. предыдущий параграф) есть вырожден-
ный случай стиля программирования от приоритетов: для каждого экземпля-
ра структурной единицы, способной реагировать на события, выставляется
(бесконечно большой) приоритет, если этот экземпляр фактически должен
активизировать реакцию, и не выставляется приоритет (выставляется беско-
нечно малый приоритет), если экземпляр не должен реагировать на собы-
тие. Общий случай стиля событийно-ориентированного программирования
также близок к стилю программирования от приоритетов, если считать, что
всем обработчикам события, которые должны быть выполнены при его по-
явлении, присвоены приоритеты, соответствующие фактическому порядку
их выполнения. Когда такой порядок неизвестен, можно считать, что всем
активизируемым обработчикам присвоены равные приоритеты.
Кардинальное различие между событийным программированием и про-
граммированием от приоритетов состоит в принципах задания управления.
В случае событийного программирования установлена прямая связь между
событием и реакцией: если условие срабатывания открывает для обработ-
чика возможность быть выполненным, то он обязательно будет выполнен в
ответ на соответствующее событие. При программировании от приоритетов
ситуация иная: задавая демону даже наивысший приоритет, можно лишь на-
деяться на то, что он сработает раньше других, причем, возможно, даже без
появления какого бы то ни было события. Если абстрагироваться от меха-
низма управления при оперировании с приоритетами и событиями, то можно
считать эти два стиля вариантами одной сущности.
Стили программирования от событий и приоритетов хорошо совмеща-
ются, взаимно дополняя друг друга, когда целесообразна следующая архи-