With all this talk about BPMN, it seems like a good time to refer people to a Analoly's excellent blog, where he has constructed a signal event example / walk-through:
Like messages, signals are used to synchronize and exchange information between different parts of the process. They differ from each other by the following:
- Message flow is drawn in the diagram explicitly by the dashed arrow while in the signal case the sender (?thrower?) and receiver (?catcher?) are linked implicitly by the signal name. That is, if there is a thrower signal (marked by a filled triangle) on a diagram labelled ?we won?, then look for a catcher signal (non-filled triangle) with the same label on this and/or other diagrams .
- Messages can only pass between different pools (i.e. between different processes), there is no such limitation for signals.
- The most important difference: messages are point-to-point communcations: an instance of a sender process cummunicates to one specific instance of the receiver process (let?s forget about start events for simplicity). Accordingly for a process engine to be able to deliver a message, one must specify the process ID of the recipient - e.g. by a process attribute. A signal passes from one process instance to many: to all instances awaiting a signal of given name at the moment. Thus signals are broadcast messages.
Its a good summary of signal events, which are quite commonly used in some BPM tools, and less commonly in others.