...There are some solutions that buffer the entire output from each process, and then output only when the process exists. This works fairly well for short processes, such as compilations, but prevents output of progress reports. This also prevents seeing the relative time each message was printed.
Makesh takes a different approach. It prefixes each output line with the concurrency index from which this output came. This allows demultiplexing the output without losing track of progress reports and relative output times.