- Non TaskManager threads don't do timings (except the very main thread)
- Use one producer/consumer token per thread for queue, dont recreate them
- Minor changes to interface (ProcessTask/AddTask are not static anymore)
- WorkerData structure that keeps all data for a worker thread (timings,
tokens)
If range checks are enabled:
- Trace all objects
- Check if memory usage never gets negative
- Check if memory usage is 0 in destructor
- Track total memory usage (use pyngcore.GetTotalMemory())