(By the way, wouldn't it be more efficient if Core downloaded blocks during the sync using multiple threads, since that can be parallelized safely?)
It does. The Bitcoin Core does simultaneous download from different peers since 0.10.0 since they introduced headers-first synchronization. Synchronization before that was notoriously slow.
The bulk of the earlier blocks should synchronize relatively quickly (due to smaller blocks + assumevalid) and will slow down significantly in blocks from the recent years. If OP runs Bitcoin Core and only synchronizes 9%, it would be a fairly painful process. The assumevalid block is fairly recent already. Switching to SPV will be better.