Я пытаюсь реализовать шаблон Producer-Consumer
, который использует несколько агентов в качестве рабочих вместо нескольких потоков.
Насколько я понимаю, типичная многопоточная реализация использует BlockingQueue
, где один поток Producer
помещает информацию в очередь, а несколько потоков Consumer
извлекают данные и выполняют некоторые функции обработки.
Следуя той же логике, мой проект будет использовать агент Producer
, который генерирует данные и отправляет их нескольким агентам Consumer
. На первый взгляд, я подумал, что должен использовать общий BlockingQueue
между агентами Consumer
, чтобы агенты обращались к очереди и извлекали данные. Но я не знаю, легко ли это сделать, потому что я не думаю, что агенты имеют какую-либо общую память, и намного проще напрямую отправлять информацию агентам Consumer
в виде сообщений ACL.
Это важно учитывать, потому что мой многоагентный дизайн будет обрабатывать много данных. Итак, мой вопрос: что произойдет в Jade, если я отправлю много сообщений ACL одному агенту? будет ли агент игнорировать другие сообщения?
В этом сообщении есть ответ, который предлагает ".. В среде JADE функция агентов «Входящие» для сообщений ACLMessages, в основном объект BlockingQueue, который содержит список полученных сообщений. Агент может наблюдать за своим собственным списком и обрабатывать их по ходу своего жизненного цикла. Контейнеры не имеют такой возможности..." . Это утверждение верно? Если это правда, то другие сообщения просто ожидают в очереди, и для моего проекта было бы идеально отправлять информацию напрямую агентам Consumer
, но я не видел никаких BlockingQueues
в классе ACLMessage.
producer
считывает данные из файла и отправляет каждому агенту одну строку (первая строка первому агенту, вторая второму... и т. д.). Каждый агентconsumer
обрабатывает сообщение, как только оно получено. Я считаю, что агентыconsumer
отстают, потому что они не могут справиться с очередью сообщений, заполненной агентомproducer
. Это достаточно ясно? Итак, проблема моего кода в том, что он отправляет много сообщений нескольким агентам, я не знаю, как это решить/оптимизировать. - person   schedule 03.07.2018