Another very handy way to do this is with gnu parallel, which is well worth installing if you don’t already have it; this is invaluable if the tasks don’t necessarily take the same amount of time.
seq 1000 | parallel -j 8 --workdir $PWD ./myrun {}
will launch ./myrun 1
, ./myrun 2
, etc, making sure 8 jobs at a time are running. It can also take lists of nodes if you want to run on several nodes at once, eg in a PBS job; our instructions to our users for how to do that on our system are here.
Updated to add: You want to make sure you’re using gnu-parallel, not the more limited utility of the same name that comes in the moreutils package (the divergent history of the two is described here.)