У меня есть поток единиц работы, позволяет называть их "Рабочие элементы", которые обрабатываются последовательно (на данный момент). Я бы хотел ускорить обработку, выполнив многопоточную работу.
Ограничение: те рабочие элементы поступают в определенном порядке, в процессе обработки заказ не имеет значения - но как только обработка завершена, заказ должен быть восстановлен.
Что-то вроде этого:
|.|
|.|
|4|
|3|
|2| <- incoming queue
|1|
/ | \
2 1 3 <- worker threads
\ | /
|3|
|2| <- outgoing queue
|1|
Я хотел бы решить эту проблему на Java, желательно без служб Executor, Futures и т.д., но с основными concurrency методами вроде wait(), notify() и т.д.
Причина: мои рабочие элементы очень маленькие и мелкозернистые, они заканчивают обработку примерно в 0,2 миллисекунды каждый. Поэтому я боюсь использовать материал из java.util.concurrent. * Может привести к большим накладным расходам и замедлить мой код.
Примеры, которые я нашел до сих пор, сохраняют порядок во время обработки (что не имеет значения в моем случае) и не заботятся о порядке после обработки (что имеет решающее значение в моем случае).