Я ищу указатель на то, как решить следующую проблему в java:
- Единственная очередь с
n
заданиями (неизвестное количество), из которых существует время обработки каждое задание также неизвестно (но, вероятно, похоже на другие задания в очереди). - Эти задания должны быть обработаны
x
количеством машин. При запуске - x=1
, но количество машин может быть увеличено до y
(неизвестное количество). Машины могут также обрабатывать sh ... - Машина может работать с несколькими элементами одновременно (каждый сервер имеет пул потоков).
- Новые задания могут быть добавлены в очередь, пока машины обрабатывают эти задания.
- Задания нужно извлекать массово, так как при загрузке в базу данных возникают издержки.
- Каждое задание обрабатывается только один раз. Если он обрабатывается более одного раза, выдается
ConcurrentModificationException
. - Нет центрального органа, кроме очереди
Моим первым решением было разделить его на части во время выполнения (немного похоже на pareto), но это приводит к большому количеству эти ConcurrentModificationException
(около 400 на 1000 рабочих мест).
private PageRequest getWorkPageRequest(int totalNbrOfJobs, int serverNumber, int totalNumberOfServers, int currentWorkQueueSize, int workerPoolSize) {
final long offset = totalNbrOfJobs / totalNumberOfServers * serverNumber;
final int limit = currentWorkQueueSize == 0 ? workerPoolSize * 4 : ((workerPoolSize * 3) - currentWorkQueueSize);
LOGGER.info("Server {} of {} total servers will process partition from {} until {} of total {}", serverNumber, totalNumberOfServers, offset, (offset+limit), totalNbrOfJobs);
return PageRequest.of(offset, limit);
}
Я пытаюсь найти решение, в котором количество ConcurrentModificationException
настолько мало, насколько возможно, и сервер не падает без работы. Мне известна проблема планирования работы Job Shop (но она не совпадает, поскольку я не знаю времени обработки и у меня нет подзадач) и OptoPlanner, но она выглядит сложной для моей проблемы.
Как вы назвать такие проблемы? Что мне нужно искать, чтобы найти литературу по этому поводу?