When you saying 0 fee, you should explain how system know which transaction should be processed first! This is a main purpose of fees and blocks are limited in size!
How do they order the blocks (agree on previous and next block) if it is async/parallel?
in this presentation. The consensus process essentially involves "agreeing" to assemble a set of transactions into the "next" empty block. The details are in the slide.