So I'm moving on to optimizing concurrent validation. This will consist of maintaining downloaded/parsed blocks in memory (cache) for the validator, and prefetching prevouts. Both the block cache and disk can be used to populate prevouts for validation, which implies that the cache is not only block-ordered, but output-indexed. Protecting the cache and allowing it to operate on spare cycles ahead of the validator implies that it requires its own thread(s), so it's another chaser.