Tiny multithread test client/server
Реализует асинхронный пошаговый алгоритм выполнения команд(команда исполняется за несколько циклов)
Файлы:
tsapi.h - API взаимодействия клиента и сервера
Commands - определение команд (реализованы две: тестовая и команда перемещения). Логика работы в функции Invoke() Команда перемещения основана на примитивном алгоритме движения на одну клетку за один цикл с обходом стены. Все команды - наследницы от ICommand
ServerImpl - реализация самого сервисного механизма. Сервер стартует в количестве потоков, равном количеству ядер. По завершению исполнения асинхронной команды сервер в контексте собственных потоков вызывает Callback.
Realm - поле 250х250 с тремя рядами препятствий
Abuser - клиент. Взаимодействует с сервером через API. Логика такая: на каждую исполнительную единицу (объект) создается группа команд и помещается в индивидуальную очередь. По одной команде одного объекта запускаются в первом цикле. По мере исполнения команд, сервер присылает Callback, который извлекает из очереди следующую команду. Таким образом многопоточность клиента реализована в контексте потоков сервера.
По окончанию работы формируется статистика:
- Количество отправленных команд
- Количество Callback'ов на команды
- Количество исполненных команд
- Количество проваленых команд (в случае, если невозможно переместить объект в требуемую точку за 250 циклов - регистрируется провал исполнения команды)
Часть функционала осталась не реализована(возможность заложена):
- Client-Side блокировка (неуправляемые указатели),
- Контроль TTL исполнения команды
- Команда STOP
- Синхронные команды (выполняемые мгновенно в момент запуска)
Запуск(пример): ./TinyTestServer --objects 100 --commands 1000 1000 команд, распределение на 100 объектов.
- Добавлены G-Test'ы
- Изменен порядок сборки: сервер собирается как библиотека