Blocks are downloaded in collection from a given peer, however a node can obtain blocks from a number of friends on the similar time, successfully downloading blocks in parallel. This parallel downloading is just not about downloading completely different elements of the identical block from completely different friends, however quite downloading completely different blocks from completely different friends.
This design permits a node to obtain the blockchain extra shortly, as it isn’t restricted by the add velocity of a single peer. It additionally provides a layer of redundancy.
Regardless of the parallel downloading of blocks, they should be processed serially. That is important for the node to keep up correct details about the present unspent transaction outputs (UTXOs) and to confirm the validity of transactions.
The precise implementation of this course of in Bitcoin Core is sort of advanced and entails numerous points like dealing with timeouts, validating blocks, and so forth. You may evaluation the precise code within the Bitcoin Core GitHub repository to get a deeper understanding.
You may additionally examine the P2P Community a part of Bitcoin Developer website – see the reason for Block, GetBlocks, GetData, GetHeaders messages, which are concerned when blocks are despatched between nodes.