Я пытаюсь реализовать шаблон Producer-Consumer
, который использует мультиагенты в качестве рабочих вместо многопоточности.
Как я понимаю, типичная многопоточная реализация использует BlockingQueue
, где один *Поток 1005 * помещает информацию в очередь, и несколько потоков Consumer
извлекают данные и выполняют некоторые функции обработки.
Таким образом, следуя той же логике, мой проект будет использовать агент Producer
, который генерирует данные и отправляет их нескольким Consumer
агентам.На первый взгляд, я подумал, что должен использовать shared BlockingQueue
между Consumer
агентами, и чтобы агенты обращались к очереди и извлекали данные.Но я не знаю, легко ли это сделать 1016 *, потому что я не думаю, что у агентов есть общая память, и гораздо проще напрямую отправить информацию агентам Consumer
в виде сообщений ACL.
Это важно учитывать, потому что мой мультиагентный дизайн будет обрабатывать много данных.Итак, мой вопрос в Jade, что произойдет, если я отправлю много сообщений ACL одному агенту?будет ли агент игнорировать другие сообщения?
В этом сообщении есть ответ, который предлагает ".. В рамках JADE агенты имеют функцию" Входящие "для ACLMessages, в основном объект BlockingQueue, который содержит список полученных сообщений. агент может наблюдать за своим списком и обрабатывать его по мере прохождения жизненного цикла. Контейнеры не имеют этой возможности ... ".Это утверждение правильно?Если это так, то другие сообщения просто ожидают в очереди, и для моего дизайна было бы идеально отправлять информацию непосредственно агентам Consumer
, но я не увидел никаких BlockingQueues
в классе ACLMessage.