Engines and Threads

# Chapter 7 Engines and Threads

Starting with release 7.0, ECLiPSe supports multiple engines and multi-threaded execution.

An engine is an entity with its own data areas and potentially independent control flow. This implies:

- engines can execute queries independently of each other
- each engine has its own search tree, backtracking in one engine does not affect others
- engines can operate in a concurrent or interleaved fashion
- communication between engines is explicit
- data transferred between engines is copied, variables cannot be shared

On the other hand, engines share or can share the following:

- loaded modules and predicates
- non-logical storage such as global variables, records, stores, shelves
- global settings (set_flag/2,3)
- streams

An engine can optionally be associated with a thread, allowing it to execute concurrently with other engines.

For more details, see the Reference Manual Section on Engines.