"Бегун" открыл код многопоточного HTTP-сервера и аллокатора памяти
- Lizard не похож на классические http-серверы двумя вещами: Во первых, обслуживающее web-запросы приложение оформлено в виде плагина, который не вызывается через интрейфейс подобный FastCGI, а непосредственно линкуется с Lizard. Допускается как динамическая загрузка плагина, так и статическое связывание, при котором приложение и http-сервер составляют единый исполняемый файл. Lizard берёт на себя обеспечение обработки протокола HTTP и вызывает обработчики событий, определенные в плагине.
Второй особенностью Lizard является поддержка двух логически разделённых пулов потоков-обработчиков соединений: первый пул ("easy") обрабатывает запросы, на которые ответ может быть отдан быстро (например, из кэша), а второй пул ("hard") обслуживает ресурсоёмкие запросы, например, требующие обновления данных в кэше. Запросы к обоим пулам обслуживаются в порядке очереди, размер которой ограничен конфигурацией (запрос отбрасывается, если все позиции в очереди заняты, что позволяет избежать перегрузки сервера). Запросы вначале всегда попадают в easy-пул и в зависимости от логики реализации плагина могут быть переданы по цепочке в hard-пул.
Конфигурация Lizard задается в XML-формате и отличается наличием всего нескольких базовых директив: IP и порт для обслуживания запросов, таймауты, ограничение на размер и число очередей, параметры ведения логов, путь к динамической библиотеке с выполняемым плагином. В плагине реализуется несколько циклически вызываемых обработчиков запросов: handle_easy для первичной обработки запросов в easy-пуле; handle_hard для выполнения более ресурсоёмких операций; set_param - вызываемый при старте сервера callback-обработчик для разбора собственного файла конфигурации плагина; idle - вызываемая через заданные промежутки времени функция для выполнения типовых периодических действий.
- Serverlib представляет собой оформленный в виде библиотеки многопоточный http-сервер, который можно встроить в любое приложение на языке C++. В отличие от усложненных многофункциональных HTTP-фреймворков библиотека Serverlib крайне проста в использовании: функциональность доступа через несколько простых функций. Запуск встроенного http-сервера сводится к вызову трёх функций: перевод процесса в фоновый режим, прикрепление к сокету и начало обработки соединений.
Обработка запроса производится в цикле и по организации работы напоминает FastCGI. Библиотека оптимизирована для 64-разрядных Linux-систем и уже достаточно давно используется в промышленной эксплуатации для обработки тысяч соединений в секунду.
- Libslave - библиотека для анализа выполнения репликации данных в СУБД MySQL. Позволяет из C++ программы присоединиться к первичному (master) MySQL-серверу и выполнить чтение и разбор используемых в процессе репликации бинарных логов. Т.е. библиотека позволяет создать приложение, которое не связано с кодом MySQL, но действует как вторичный (slave) MySQL-сервер, на который производится передача реплицированных данных. Из областей применения называется возможность создания обработчиков поступающих в базу изменений, получающих данные в режиме реального времени без привлечения промежуточных хранилищ.
- lockfree-malloc - оптимизированная для многопоточных приложений система распределения памяти, способная заменить стандартные функции malloc и free.
Достоинства lockfree-malloc:
- Пригодность для использования в многопоточных программах, поддержка практически неограниченного числа одновременно работающих нитей без падения производительности из-за блокировок;
- Высокая эффективность в многопоточном окружении: lockfree-malloc значительно опережает по производительности систему распределения памяти libc;
- В отличие от libc в Lockfree-malloc никогда не выделяются фрагментированные области памяти;
- Низкий расход памяти, для объектов размером до 8 Кб при хранении полностью отсутствуют накладные расходы;
- Оптимизация для работы на 64-разрядных системах;
- Реализация библиотеки занимает всего 800 строк кода;
- Автономность, библиотека не зависит в процессе работы от других библиотек, таких как pthreads и libc.
Недостатки lockfree-malloc:
- Работа только на процессорах с архитектурой x86_64;
- Библиотека не пытается экономить области маппинга виртуальной памяти;
- Используемая для хранения небольших объектов память (до 128 Кб) кэшируется аллокатором и никогда не возвращается обратно операционной системе.
Источник: http://www.opennet.ru/opennews/art.shtml?num=30308
|
0 | Tweet | Нравится |
|