# AIO & Assets

## Async IO:
- Batches of loads (vy_load_batch)
- Each load: file-id, offset-in-file, num-bytes, destination buffer
- SubmitLoadBatch() -> Handle for whole batch or handles for each file op?
- Reason: Better saturation of disk interface
- Batch interacts nicely with asset system described below:

## Assets
- Have a tool that detects asset dependencies (maybe the same tool that bakes assets into their runtime format)
- i.e. world-cell -> meshes -> textures
- Bake into a single binary (asset_meta.bin)
- Have that file loaded at runtime at all times
- DetermineAssetDependencies() -> CreateLoadBatch(asset-id) 
- CreateLoadBatch() could take a cache into account

### File Storage in Memory 
- Linked lists of block-regions with fixed size blocks (bitmap allocator)
- E.g. 1, 2, 3, 5 mb (maybe down to kb) blocks
- Blocks have refcounts, explicitly increased/decreased
- Either lock the whole region or lock individual blocks

### Cache
- Hold one reference to storage
- Track how much space is taken for cache
- Evict LRU(?) once taken space exceeds threshold
- Copies could be managers handed to the cache

