What is `xargs -P 0` exactly doing, and is it a good idea to use it?
xargs provides a command
xargs -P 0, the doc mentions that is spawns as many processes as possible to run the commands in parallel. But is it stopping, e.g., at the number of available CPU, or litterally several tens of thousands of threads? If it is the second option, isn’t it less efficient than spawning around the number of CPU threads? I guess constantly changing between processes can take a non-negligeable time right?
I ended up doing the test myself. So
-P 0 does try to run all processes at the same time (the limit being around the maximum number of allowed threads per the OS, which can be several thousands, I think), but it is a very bad idea to use it on CPU intensive tasks as this makes the system really slow.
I tested with around 200
pdflatex processes, and the overall running time is actually higher (2:05mn instead of 1:10mn) than with
-P 16 on my process when using 200 processes (I guess the additional time to switch between processes explains this). Moreover, with
-P 0 the whole OS is laggy and hard to use which is not the case with
-P 16. (My cpu has 8 CPU threads.)