An asynchronous thread is a thread that, by default (but not necessarily), runs asynchronously, and a VM is a queue-based transport.
What you probably have in mind is that the difference is between invoking the asynchronous stream through ref-ref or executing it through the VM queue.
flow-ref will send the same event and message for processing. If the stream is asynchronous, then by default this will happen on another thread, and Mule will make a copy of the event to prevent interference between the threads. Under certain conditions (for example, there is an active transaction), the Mule may choose to execute synchronously, despite the configuration of the stream. All this happens in memory, which means that if the server crashes, you may lose the message.
VM is a transport, which means that each thread will receive a copy of the same event, but different messages. All outgoing properties of the sender will become incoming properties of the recipient. Synchronization does not depend on the configuration of the stream, but on the selected exchange template. In addition, you can configure the virtual machine to use persistent queues and transactions, which would guarantee the loss of a null message when used correctly.
source share