Я подозреваю, что это очень просто, но я не уверен, есть ли наивный способ сделать это на Java. Вот моя проблема: у меня есть два сценария для обработки данных, и оба имеют одинаковые входы/выходы, за исключением того, что один написан для одного процессора, а другой для графических процессоров. Работа происходит от сервера очереди, и я пытаюсь написать программу, которая отправляет данные либо на процессор, либо на графический процессор, в зависимости от того, какой из них является бесплатным.Балансировка нескольких очередей
Я не понимаю, как это сделать.
Я знаю, что с помощью executorservice Я могу указать, сколько потоков я хочу продолжать работать, но не уверен, как сбалансировать между двумя разными. У меня есть 2 GPU и 8 ядер процессора в системе, и я думал, что у меня может быть трэдексрексерсервис, который поддерживает 2 процессора GPU и 8 процессоров, но не уверен, как сбалансировать их, поскольку GPU будет выполняться намного быстрее, чем задачи CPU.
Любые предложения о том, как подойти к этому? Должен ли я создавать две очереди и собирать их, чтобы увидеть, какой из них менее занят? или есть способ просто поместить все рабочие единицы (все-таки) в одну очередь и выполнить процесс GPU или CPU из той же очереди, что и они, бесплатно?
ОБНОВЛЕНИЕ: только для уточнения. программы CPU/GPU выходят за рамки программы, которую я создаю, это просто сценарии, которые я вызываю двумя различными способами. Я предполагаю, что упрощенная версия того, что я прошу, заключается в том, что два метода могут выполнять работу из одной очереди?
Не знаете, как использовать GPU, но вы не можете просто 10 потоков (в ExecutorService или 2 - не уверен, что ГПУ часть) работает что-то вроде 'в то время как (true) {Задача t = yourQueue.take(); t.run();} '?Поэтому каждый поток может идти и выполнять новую задачу, когда это делается, независимо от того, что делают другие. – assylias
@assylias Я не уверен, что полностью понимаю (я, возможно, и не объяснил это правильно). Если у меня есть два метода, как они могут получать данные из одной очереди с помощью кода примера? Разве это не просто отправить всю работу одному методу? (извините, что я новичок на Java, но я пока не понимаю). – Lostsoul