Я столкнулся со следующей проблемой: Я реализовал искатель, и я хотел бы знать, сколько запросов было выполнено в течение последней секунды, и какой объем данных был загружается в течение последней секунды.Как реализовать счетчик атомарного запроса
В настоящее время я реализовал его с помощью замков. Моя версия использует очередь и два счетчика (счет и сумма). Когда задача выполнена, я просто увеличиваю счетчики, и добавляю событие (с текущей датой) в очередь Когда вы хотите получить значение моих счетчиков, я проверяю, есть ли какие-то вещи в очереди более 1секунды старый. Если это так, я удаляю его и правильно уменьшаю счетчики. Затем я возвращаю желаемый результат.
Эта версия работает хорошо, но я хотел бы, для целей обучения, переопределить ее с помощью атомных операций вместо блокировок. Тем не менее, я должен признать, что я застрял на «операции очистки». (дезертировка старых значений)
Итак, это хороший подход, чтобы реализовать это?
Какой другой подход я мог использовать?
Спасибо!
Мне нужна эта система очередей, потому что я не хочу глобального запроса, а номер запроса, сделанного в течение последней секунды. В моем случае абсолютный подсчет невозможен. – Nisalon
Понял. Поэтому каждую секунду поток будет выполнять второй блок кода, который сбрасывает значения @Nisalon. Правильно? – Gray
Не совсем. Потому что я не хочу читать каждую секунду, я хочу прочитать, что произошло за последние 1000 мс. Если я использую ваш метод, то при t = 1500 мс я ожидаю, что данные о задачах будут завершены во время t = 500ms && t = 1500ms Используя ваш метод, у меня будут данные о задачах, завершенных во время t = 1000 мс && t = 1500ms – Nisalon