Selection of Dispatch Mechanism According to Source or Type of a Command
Original Publication Date: 2001-Sep-01
Included in the Prior Art Database: 2003-Jun-20
A mechanism is disclosed for selecting a dispatch method to use based on the source or type of a command to be dispatched. This enables systems to support multiple execution modes for commands (for instance queued, concurrent and immediate dispatch), and select an appropriate mode for each command. The dispatcher selects the dispatch mode based on the type and source of the command received. A command type will be determined by evaluating the command content and matching the command with a task to execute (from an internal or external list of commands), then looking up information about the task to determine the execution mode to execute the command in. The command type may also be determined by evaluating the source of the command. A source within the application (a command generating a sub-command) will execute as an immediate dispatch to prevent a queue deadlock, whereas a source outside the application may be added to the queue or placed in the query thread pool depending on its type. This capability enables dispatch policy to be implemented by the dispatcher working with task information and routing information to determine the execution of the commands within the system, without requiring commands to carry this information, or be changed during execution to reflect changes in execution. For example, a system may receive query commands from an external source and place the query command within a thread pool to be executed when the pool has an open slot. The same dispatcher, when receiving a query command from an internal source will execute the command immediately bypassing the thread pool. In both cases the command was the same, but was received from a different source and dispatched differently. Likewise, in a system that only supports single update at a time semantics, externally generated updates will be queued, while internally generated updates will be dispatched immediately while the parent task blocks.