Working with data that is changing while it is being worked on, so called "dynamic data", presents unique
challenges to a visualization and analysis framework. In particular, making rendering and analysis mutually exclusive
can quickly lead to either livelock in the analysis, unresponsive visuals or incorrect results. A framework's
data store is a common point of contention that often drives the mutual exclusion. Providing safe, synchronous
access to the data store eliminates the livelock scenarios and responsive visuals while maintaining result correctness.
Persistent data structures are a technique for providing safe, synchronous access. They support safe,
synchronous access by directly supporting multiple versions of the data structure with limited data duplication.
With a persistent data structure, rendering acts on one version of the data structure while analysis updates
another, effectively double-buffering the central data store. Pre-rendering work based on global state (such as
scaling all values relative to the global maximum) is also efficiently treated if independently modified versions
can be merged. The Stencil visualization system uses persistent data structures to achieve task-based parallelism
between analysis, pre-rendering and rendering work with little synchronization overhead. With efficient
persistent data structures, performance gains of several orders of magnitude are achieved.