A discrete event simulation consists of a network of nodes that interact by exchanging messages. A simple node is an active entity with state, while a compound node is an instantiation of a group of simple and compound nodes and their interconnections. Compound nodes can be constructed in a hierarchy of arbitrary depth. Nodes send and receive messages via ports which are attached to the ports of other nodes via links. Compound nodes transparently pass messages between their internal nodes and external nodes by mapping
their external ports to the ports of internal nodes.
Every node state transition and message exchange is an event that occurs at a discrete time step during the simulation execution. When applied to software systems, the nodes in a discrete event simulation correspond to computational resources that request services from each other. Each node queues requests,
spends some time processing each request, updates its state, and produces output. The behavior of nodes, such as the frequency with which they request services and the amount of time they spend processing requests, is often modeled stochastically. The emergent behavior of the system results from resource contention, node interaction patterns, and other factors.
Discrete event simulation engines may be designed in a variety of ways, but always include a core set of capabilities. A scheduler determines the order in which events occur. Whenever a node in the simulation sends a message, a router delivers it to the intended recipients. A handler determines what state transitions or new messages result from each event. Discrete event simulators often also include random number generators and statistical utilities for conveniently creating stochastic behavior and analyzing simulation data. One of the most important features of discrete event simulations is their flexibility. Discrete event simulations have been used to analyze the performance, dependability, resource consumption, and other properties of software systems. Discrete event simulations can also model highly dynamic systems with entities that come and go and adapt their behavior based on their environment. Finally, discrete event simulations can be combined with models of continuous systems, such as the physical environment, to produce hybrid models with both discrete and continuous elements.