Практически весь текст я утащила с википедии, но только лишь потому, что описание там отличное и мне хотелось бы его иметь здесь, в подборке планируемых публикаций о POE и AnyEvent.
Событийно-ориентированное программирование (event-driven programming) — это парадигма программирования, в которой выполнение программы определяется событиями — действиями пользователя (клавиатура, мышь), сообщениями других программ и потоков, событиями операционной системы (например, поступлением сетевого пакета).
Событийно-ориентированное программирование можно также определить как способ построения компьютерной программы, при котором в коде (как правило, в головной функции программы) явным образом выделяется главный цикл приложения, тело которого состоит из двух частей: выборки события и обработки события.
Событийно-ориентированное программирование, как правило, применяется в трех случаях:
- при построении пользовательских интерфейсов (в том числе графических);
- при создании серверных приложений в случае, если по тем или иным причинам нежелательно порождение обслуживающих процессов;
- при программировании игр, в которых осуществляется управление множеством объектов.
Применение в серверных приложениях
Событийно-ориентированное программирование применяется в серверных приложениях для решения проблемы масштабирования на 10000 одновременных соединений и более.
В серверах, построенных по модели «один поток на соединение», проблемы с масштабируемостью возникают по следующим причинам:
- слишком велики накладные расходы на структуры данных операционной системы, необходимые для описания одной задачи
(сегмент состояния задачи, стек); - слишком велики накладные расходы на переключение контекстов.
Пример реализации: веб-сервера nginx и lighttpd.
Perl и событийно-ориентированное программирование
Perl является языком программирования, который наиболее полным образом поддерживает принципы событийно-ориентированного программирования. Наиболее популярные perl-фреймворки для создания приложений в стиле СОП: POE и AnyEvent.
Полезные ссылки
ru.wikipedia.org: Событийно-ориентированное программирование