Сервер наглядно представляет прекрасный пример преимуществ и недостатков событийно-управляемого программирования, основанного на мультиплексировании ввода и вывода. Одним из преимуществ является то, что событийно-управляемое проектирование обеспечивает программистам большую степень управления поведением своих программ, чем проектирование, основанное на процессах. Например, можно представить написание программы событийно-управляемого параллельного сервера, обеспечивающего предпочтительное обслуживание определенных клиентов, что было бы сложно для параллельного сервера, основанного на процессах.
Другим преимуществом является то, что событийно-управляемый сервер, основанный на мультиплексировании ввода-вывода, работает в контексте одного процесса, следовательно, каждая логическая схема имеет доступ ко всему адресному пространству процесса. Этим упрощается совместное использование данных между потоками. Связанным с выполнением в виде одного процесса преимуществом является то, что параллельный сервер можно отладить, как любую последовательную программу, используя инструмент отладки, например, GDB. И наконец, событийно-управляемые проекты часто значительно более эффективны и производительны, нежели основанные на проектах, потому что они не требуют контекстного переключателя процесса для планирования нового потока.
Значительным недостатком событийно-управляемых проектов является сложность кодирования. К примеру, параллельный событийно-управляемый эхо-сервер требует в три раза большего объема кодирования, нежели сервер, основанный на процессах, и к сожалению, эта сложность повышается по мере уменьшения степени распараллеливания процессов. Под распараллеливанием подразумевается количество команд, выполняемое каждой логической схемой в период времени. Например, в параллельном сервере степень распараллеливания - количество команд, необходимое для считывания целой текстовой строки. Пока определенная логическая схема считывает текстовую строку, никакая другая логическая схема не может «двигаться дальше». Для примера это замечательно, однако делает событийно-управляемый сервер уязвимым для клиентов-злоумышленников, которые отправляют только часть текстовой строки, после чего останавливают процесс. Модификация событийно-управляемого сервера для обработки неполных текстовых строк нетривиальна, однако она выполняется автоматически проектом, основанным на процессах.
© digitrode.ru