Циклические операции с привязкой к ЦП от пользователей

У нас есть API конечного пользователя для выполнения некоторых длительных (30 с-1 ч) операций с привязкой к процессору. Пользователь может создать задачу, опросить статус задачи много раз и, наконец, получить результат.

Внутри у нас есть очередь для задач и несколько работников, которые могут справиться с этими задачами.

Проблема возникает, когда Пользователь 1 создает много больших задач, а сразу после этого Пользователь 2 создает одну маленькую задачу. Пользователь 2 ожидает получить результат быстро, но все рабочие выполняют задачи пользователя 1. Задача от User1 находится в конце очереди.

Ожидается, что задачи от обоих пользователей будут обрабатываться циклически.

Есть ли готовое решение для решения такой проблемы?

(ОБНОВЛЕНИЕ) Нашел тот же вопрос: Какие очереди механизмы реализации циклических очередей?


person Denis Sokolov    schedule 23.09.2019    source источник
comment
Я предполагаю, что можно определить размер задачи до того, как она будет отправлена ​​исполнителю. Затем вам нужно либо иметь возможность приостанавливать и возобновлять длительную задачу, либо иметь отдельный поток рабочих для небольших задач.   -  person Maxim Fateev    schedule 24.09.2019


Ответы (1)


Вероятно, одним из подходов было бы введение приоритизации задач.

Например, в зависимости от предполагаемого времени выполнения задачи - различают малые (С), средние (С) и большие (М). Тогда задачи с разным приоритетом будут отправлены в разные очереди. Итак, наконец, user может опросить все приоритетные очереди (S, M и L) для своей конкретной задачи и найти результат быстрее, чем ожидая в одной очереди.

Может быть несколько вариантов этого подхода. Например, user может сам различать S/M/L и точно знать, какую очередь опрашивать (таким образом исключая опрос всех очередей). В качестве альтернативы может быть какой-то dispatcher компонент/сервис, который будет делать это глобально и уведомлять users, какую очередь они должны опрашивать.

person Oleksii Zghurskyi    schedule 27.09.2019