To reduce the performance impact on your application, all the heavy lifting is moved onto background threads. The main thread does do a bit of work when `context.Update()` is invoked, but you shouldn't notice any stutters or FPS drops.
The 'heavy' work that runs on background threads includes:
- **Preparation** - calculating a bounding volume hierarchy (BVH) for faster raytracing, resizing/allocating memory, applying settings changes
- **Raytracing** - building trails, casting occlusion/reverb/permeation/visualisation rays (see [[raytraced-audio/v110/Advanced/Trail-Based Raytracing|Trail-Based Raytracing]])
- **Analysis** - calculating reverb + occlusion properties
The flow is:
- 1 background thread runs the Preparation task
- Then, N threads run all Raytracing tasks
- Then 1 background thread runs the Analysis task