Skip to content

Repository files navigation

Описание

Проект реализует алгоритм ассинхронной работы, описанный в test_task_description.txt.

Сборка

Для сборки проекта потребуется:

  • CMake версии 3.12 или выше,
  • gcc 12.3.0 или выше.

Целевая ОС: Linux.

Для сборки проекта следует выполнить команды в директории проекта:

  • mkdir <output dir>, где output dir — имя поддиректории сборки, например out
  • cd <output dir>
  • cmake -DCMAKE_BUILD_TYPE=<build type> .., где build type — тип сборки, Release или Debug
  • make

Запуск

Для запуска собранной программы необходимо выполнить команду:

  • ./data_processor <buffer_size> [worker_count] [run_mode]

Где:

  • buffer_size — размер входного и выходного буфера в байтах (больше 0, обязательный параметр);
  • worker_count — количество рабочих потоков (больше 0, по умолчанию количество ядер процессора);
  • run_mode — режим работы: normal, check (по умолчанию normal), в режиме check выполняется дополнительная проверка выходного массива и выводится время, потраченное на каждое действие (генерация, процессинг, проверка).

Например:

  • ./data_processor 104857600 8

Для получения справки необходимо запустить программу без параметров.

Оссобенности реализации

  • Основная логика программы реализована в классе dpr::data_processor_t (файлы data_processor.hpp и data_processor.cpp).
  • Количество реальных рабочих потоков может быть меньше заданного, если размер буфера недостаточно большой. Так для буффера размером 400 байт реальное количество рабочих потоков будет не больше 2.
  • Для обмена данными между раздающим и рабочими потоками используется кольцевой буфер. Это lock-free структура, реализованная в классе util::ring_buffer_t<T> (файл ring_buffer.hpp). Для обмена данными используется два кольцевых буфера на каждый рабочий поток.
  • Для рабочих потоков используется класс util::worker_thread_t<T> (файл worker_thread.hpp).

About

Test task: data_processor (see readme)

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages