even though the agents may be able to quickly execute actions and the engine is able to quickly perform a reasoning cycle, the overall performance could be very poor.

It may be more efficient to implement a number of queues, which holds a number of items waiting to be examined and used. The agents holds a queue of actions to perform, while the engine has a queue of percepts to consider. The idea is that if an agent has no items in the queue, it must wait. However, if the engine has not received any percepts, it should keep revising the plans, using the knowledge it currently has available. Eventually, the agent will send new percepts, which would let the engine update the plans to conform with the changes in the environment.

Both approaches have advantages and disadvantages. Using the synchronous approach, the engine and the agents are always up-to-date. No matter what happens in the environment, the engine will know immediately, potentially giving rise to a change in the plan. However, as mentioned, the process is synchronous, meaning that it may prove to perform very poorly.

In the asynchronous approach, on the other hand, the engine continuously updates the 