Технические особенности


НАЧАЛО >> Документация >> Руководство администратора >> Технические особенности📄 Скачать в DOCX


Раздел описывает внутренние механизмы модуля Queue, которые важны при настройке производительности, диагностике зависших задач и разборе высокой нагрузки на сервер.

1. Оптимизация производительности и кеширование

Модуль снижает количество обращений к файловой системе и SQLite за счет системного кеша. Часто изменяемые состояния не перечитываются из базы при каждом опросе интерфейса или рабочего потока, а синхронизируются через быстрые ключи кеша.

Механизм Что кешируется или оптимизируется Практический эффект
QueueTaskStatus_<ID> Прогресс задачи, текст прогресса и время последней активности (progress, progressmsg, lastactivity) Частые обновления прогресса не создают постоянную запись в QueueInfo.db, а мониторинг получает актуальное состояние из памяти.
QueuePaused Глобальная пауза очереди Диспетчер и уже запущенные потоки быстрее узнают, что очередь остановлена, без лишнего чтения записи настроек.
QueueOnlyHigh Режим обработки только приоритетных задач Рабочие потоки быстро отсекают обычные задачи, когда сервер должен выполнять только приоритетные операции.
SqlBatch Пакетное выполнение накопленных SQL-запросов Очистка завершенных, ошибочных и зависших задач делает меньше отдельных операций записи и короче удерживает блокировку SQLite.

При постановке задачи в очередь Queue сразу создает запись состояния QueueTaskStatus_<ID> с начальным прогрессом и временем активности. При вызовах SetProgress, GetProgress, SetTaskInfoElm и GetTaskInfoElm поля прогресса и lastactivity обрабатываются через кеш, поэтому частые обновления не перегружают диск.

Выбор задачи для запуска учитывает время отложенного старта: в работу попадают только задачи, у которых started меньше или равен текущему времени. Это позволяет заранее помещать задания в очередь без риска преждевременного запуска.

Сборщики мусора (ClearDonedTasks, ClearErroredTasks, ClearTimeoutedTasks) используют пакетные транзакции и синхронизируют удаление с кешем. Когда завершенная задача физически удаляется из базы, ее QueueTaskStatus_<ID> также удаляется из памяти, чтобы кеш не накапливал устаревшие состояния.

Для удаленных задач действие RetrieveRemoteResult после чтения результата удаляет временный SID-файл через SidFileRemove. Это предотвращает повторное получение старого результата при следующем обращении с тем же идентификатором.

2. Справочник технических механизмов