Nemesis provides a single mechanism by which domains can communicate the occurrence of events to each other -- this also includes indications from interrupt handlers. A domain is eligible for scheduling when it has pending events, at which point it is included in the scheduling mechanism described above. Then, when a domain is activated, it is informed of pending events.
Events themselves do not carry values, but merely indicate that something has occurred. This may be the updating of a shared object, the arrival of a message from the network, passage of time, etc.; however, closures (ie. methods and data) are associated with each event and hide this heterogeneity from the event dispatcher.
The examples of a protocol domain processing arriving packets and inter-domain procedure calls highlight the need for two types of event signalling: synchronous and asynchronous, depending on whether signalling an event should cause a domain to voluntarily give up the processor to the signalled domain or continue executing. In the inter-domain call example, implemented using a pair of message queues in shared memory between the relevant client and server domains and a pair of events, lowest latency for a client/server interaction will be achieved by the client and server implementing the synchronous form of notification. However, a domain performing demultiplexing of incoming packets may be most efficient using the asynchronous means.