So you chase the downloads with a validator, that spins up max threads to validate blocks as the population gaps in the chain are filled. Given that block 1 can be a gap until the very end, you introduce a window that must close out every 50k blocks or so (we tried different sizes). Then you can keep the validator moving with the downloader. Or on smaller machines, you just defer validation until downloads are all complete (we've meander both approaches)...