Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Непейвода Н.Н. -> "Основания программирования " -> 53

Основания программирования - Непейвода Н.Н.

Непейвода Н.Н., Скопин И.Н. Основания программирования — Институт компьютерных исследований , 2002. — 919 c.
Скачать (прямая ссылка): osnovanprogramm2002.pdf
Предыдущая << 1 .. 47 48 49 50 51 52 < 53 > 54 55 56 57 58 59 .. 316 >> Следующая

Кардинальное различие меду собтийным программированием и программированием от приоритетов состоит в принципах задания управления. В случае событийного программирования установлена прямая связь между событием и реакцией: если условие срабатывания открывает для обработчика возмо ность быть выполненным, то он обязательно будет вполнен в ответ на соответствуее событие. ри программировании от приоритетов ситуация иная: задавая демону да е наивсий приоритет, мо но лиь надеяться на то, что он сработает раньше других, причем, возможно, даже без появления какого бы то ни было события. Если абстрагироваться от механизма управления при оперировании с приоритетами и событиями, то мо но считать эти два стиля вариантами одной суности.
Стили программирования от событий и приоритетов хороо совмеа-ются, взаимно дополняя друг друга, когда целесообразна следующая архи-
3.6.
145
тектурная схема разработки программного проекта. В рамках событийного подхода готовятся фрагменты системы, которые отвечают за реакцию на каждое из событий, реализуемую разными обработчиками, а программирование этих обработчиков ведется в стиле программирования от приоритетов.
Как для событийного программирования, так и для программирования от приоритетов характернм является то, что и условия скорее глобальны, и действия тоже.
Рассмотрим написанный в двух вариантах на двух условных языках пример программ с приоритетами. Программа 3.6.1
3: Цикл пока не будет все сделано {
5: Подготовка данных;
10: Обработка текущих изменений;
};
4: Демон {Если Поступили данные То
Прием рутинныых данных}; 8: Демон {Если Поступили экстренные данные То
Запоминание экстренных изменений}; 12: Демон {Если Авария То Аварийные действия};
Программа 3.6.2
a: PRIO 3 {Prepare Data;SLEEP}; b: PRIO 10{Process Changes;SLEEP}; c: PRIO 8 DAEMON IF Extra Data
THEN Store Extra Data;
AWAKE b FI; d: PRIO 12DAEMON IF Alert
THEN Emergency; FI; e: PRIO 2 DAEMON IF Idle
THEN AWAKE a; FI;
Видно, что в данном примере все приоритеты задавались статически. мен-но к этому стремятся почти во всех случаях современной практики вычислений с приоритетами. Но полной статичности можно добиться лишь в про-
146
3.
стейих случаях. апример, если процесс долго дет своей очереди на исполнение, то естественно постепенно поднимать его приоритет. Но тогда приоритет такого «пользовательского» действия может превзойти приоритет системного процесса, и остается либо статически задавать кадому процессу допустимй максимальнй приоритет и мы вновь попадаем в ту е ловуку, либо задавать разнм классам процессов приоритеты просто несравнимые по порядку, чтобы ни при каком нормальном исполнении приоритет пользовательского процесса не дорос, скажем, до 109, за которым начинаются приоритет срочных системнх демонов.
Заметим, что назначение приоритетов операционной системой, «сверху», принципиально ничего в данной картине не меняет. С точки зрения пользовательских программ эти приоритеты все равно статические.
Рассмотрим теоретически, какие классы программ можно описать при помои статических и динамических приоритетов. казвается, при помои статических приоритетов, являихся натуральными числами, невоз-мо но описать да е примитивно-рекурсивные композиции исходнх дей-ствий21.
Таким образом, чисто концептуально натуральных чисел не хватает для описания приоритетов, но оказывается, что для них хватает ординалов (см. курс математической логики). Поскольку ординалы до е0 имеют хорошую вычислительную модель (см., напр. [63]), можно рассматривать целочисленные приоритеты как конкретную реализацию абстрактного класса таких ординалов.
в случае реально распределеннх или реально параллельных действий проблема приоритетов еще важнее и еще сложнее. Часто управление по приоритетам — единственный анс справиться со сло ность такой нелинейной во времени систем . Тут у е и линейно упорядоченного мно ества приоритетов не хватает.
В целом программирование от приоритетов является моным, но специфическим орудием для описания глобальных совместных, параллельных или распределенных процессов. Его элементы проника т и в традиционне систем программирования в виде обработки искл чительных ситуаций в программах. Здесь, как и в событийном программировании с обособленными реакциями, всего два приоритета, которе налага тся на структуру исполь-зуей конструкции. ротиворечивость этого средства со структурнм про-
Правда, здесь мы отвлекаемся от реальных ограничений, и считаем 10 столь же легко достижимым числом, как и 10.
3.7. ФУНКЦИОНАЛЬНОЕ ПРОГРАММИРОВАНИЕ
147
граммированием только в том, что не всегда ясно, что делается далее, когда обработка исключения завершается. В сравнении со структурными переходами такое расширение представляется более искусственным.
§ 3.7. ФУНКЦИОНАЛЬНОЕ ПРОГРАММИРОВАНИЕ
При функциональном программировании основным понятием является функция. Mы интересуемся определением и переопределением функции как целого. Соответственно, тогда сами функции становятся значениями. Uо-этому здесь необходим серьезный теоретический анализ. Нужно разобрать, какие действия мы можем производить над функцией как над единым объектом, какие мы мо ем получить от этого преимуества и в каких случаях целесообразно так работать, а в каких нет.
Предыдущая << 1 .. 47 48 49 50 51 52 < 53 > 54 55 56 57 58 59 .. 316 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100