Библиотека counter_atm предоставляет программный интерфейс (API) для высокопроизводительного
подсчета событий и измерения их скорости (интенсивности) в многопоточных приложениях. Библиотека
разработана с использованием современных возможностей C++20 и специально оптимизирована для
безопасной работы в параллельных средах, где счетчики могут инкрементироваться из разных потоков
одновременно.
-
Потокобезопасный подсчет событий:
- Атомарный счетчик с гарантированной целостностью данных при параллельном доступе
- Безопасное использование в многопоточных приложениях без необходимости внешней синхронизации
- Минимальные накладные расходы при интенсивном использовании благодаря оптимизированным атомарным операциям
-
Измерение скорости поступления событий:
- Автоматическое вычисление скорости (событий в секунду) на основе интервала между измерениями
- Точное измерение временных интервалов с использованием высокоточных часов
std::chrono::steady_clock - Мгновенная оценка интенсивности событий в реальном времени
-
Гибкие возможности инкрементирования:
- Пошаговое увеличение счетчика (по одному событию)
- Пакетное обновление для добавления нескольких событий одной операцией
- Возможность сброса счетчика для начала нового цикла измерений
-
Программный интерфейс:
- Простой и интуитивно понятный API на основе абстрактного интерфейса
ICounter - Фабричный метод для создания экземпляров счетчика с корректной обработкой ошибок
- Получение статистики в виде структуры
CounterWithRateс общим количеством событий и их скоростью - Реализация с использованием современных возможностей C++20 (атомарные операции, noexcept, unique_ptr)
- Обработка ошибок с информативными сообщениями через исключения
- Простой и интуитивно понятный API на основе абстрактного интерфейса
-
Практическое применение:
- Измерение производительности и нагрузки в высоконагруженных системах
- Мониторинг интенсивности событий в режиме реального времени
- Анализ пропускной способности обработки данных
- Учет статистики в многопоточных серверных приложениях
- C++20
Проект предоставляет следующие опции сборки через CMake:
-
BUILD_SHARED_LIBS - выбор типа библиотеки для сборки:
ON(по умолчанию) — сборка динамической библиотеки (.so)OFF- сборка статической библиотеки (.a)
-
BUILD_EXAMPLE - включение/отключение сборки примера:
ON- собирать пример использования библиотекиOFF(по умолчанию) — не собирать пример
-
BUILD_TESTING - включение/отключение сборки тестов
ON- собирать тестыOFF(по умолчанию) — не собирать тесты
Проект использует CMake для сборки:
mkdir build
cd build
cmake ..
makemkdir build
cd build
cmake -DBUILD_TESTING=ON ..
makemkdir build
cd build
cmake -DBUILD_SHARED_LIBS=OFF ..
makemkdir build
cd build
cmake -DBUILD_SHARED_LIBS=OFF -DBUILD_EXAMPLE=OFF ..
makecd build
make packageПосле сборки можно установить библиотеку:
sudo make installИли установить созданный DEB-пакет:
sudo dpkg -i libcounter0*.debПри сборке динамической библиотеки создаются два пакета:
libcounter0- содержит саму динамическую библиотекуlibcounter0-dev- содержит заголовочные файлы и символьные ссылки для разработки
При сборке статической библиотеки создается только один пакет:
libcounter0-dev- содержит статическую библиотеку и заголовочные файлы
=== ТЕСТИРОВАНИЕ БИБЛИОТЕКИ COUNTER ===
[13:09:32] Демонстрация счетчика в одном потоке
[13:09:32] Событие добавлено
[13:09:32] Событие добавлено
[13:09:33] Событие добавлено
[13:09:33] Событие добавлено
[13:09:34] Событие добавлено
[13:09:34] Всего событий: 5, Скорость: 2.00 событий/сек
[13:09:34] Демонстрация счетчика при высокой нагрузке
[13:09:34] Всего событий: 10000, Скорость: 35822007.61 событий/сек
[13:09:34] Демонстрация пакетного обновления счетчика
[13:09:34] Добавлено 100 событий
[13:09:35] Добавлено еще 200 событий
[13:09:35] Добавлено еще 300 событий
[13:09:36] Всего событий: 600, Скорость: 399.73 событий/сек
=== ТЕСТИРОВАНИЕ ЗАВЕРШЕНО ===
