Представьте, что у вас есть n-Threads, которые все работают на конечной точке SOAP, чтобы получить некоторые данные и сохранить их в файловой системе. Какой лучший способ отобразить пропускную способность этих потоков за последнюю секунду?
Я пришел к следующей идее:
Все 32 (n
в данном случае) потоки содержат AtomicInteger
, который увеличивается каждым потоком после записи одного файла в файловую систему. Это AtomicInteger
затем оценивается другим потоком (# 33), который просто существует для регистрации этого AtomicInteger
, разделенного на n-Threads, оценки ETA с использованием метрик (общее количество оставленных записей / пропускная способность), сбрасывающих AtomicInteger
до нуля, а затем спит одну секунду и продолжает цикл до тех пор, пока все потоки не завершат свою работу.
Однако возникает следующая проблема: блокировка AtomicInteger приведет к некоторой потере производительности (хотя я бы это учел) незначительно), и результат никогда не будет последней секундой, так как будет иметь место некоторое изменение времени блокировки.
Кто-нибудь может придумать более элегантное решение этой проблемы? Я думаю, что я мог бы полностью обдумать это, и у Java уже есть какое-то решение для этого.
Даже если для этого есть стороннее решение или пакет, я бы лучше понял, как сделать это правильно, чем просто использовать пакет.
Потоки создаются ExecutorService
, а все потоки относятся к Runnable
.