Limits
What this tool will not do, stated plainly — including the limits the lab ran into itself.
It cannot speed up a single job
One input takes as long as it takes. Parallelism divides a list; it does not accelerate the items. A command that runs one core at full stretch — most encoders in their default mode, most interpreters — gains nothing except company.
Shared bottlenecks stay shared
Cores multiply; disks, networks and
services do not. Twelve jobs compressing
files from one disk are bounded by that
disk, and twelve jobs calling one API
are bounded by its rate limit — and may
earn you a ban where four polite jobs
would not. When a parallel run is
slower than the loop it replaced, this
is almost always why, and the fix is a
smaller -j, not a bigger one.
Starting jobs is not free
The lab's own timing table (chapter 4)
is the honest exhibit: on a busy shared
machine, eight one-second sleeps took
15 to 48 seconds of wall time, and the
difference was job-start overhead, not
sleeping. Every job costs a process
start, a shell, and bookkeeping.
Millisecond jobs — renaming, touching,
echoing — can spend more time being
started than being run. Batch tiny work
into fewer, larger jobs (--pipe
blocks, chapter 7) or keep the loop.
Output held is memory held
-k, --group and --results all
buffer output. A job that prints
gigabytes will occupy gigabytes until
its turn to print comes. Long, chatty
jobs want --line-buffer or a
redirection into their own files
instead.
It is not a scheduler
No dependencies between jobs, no priorities, no queues that survive the run, no restarting a failed job unless you kept the job log and ask (chapter 9). Cluster schedulers — Slurm, Kubernetes Jobs, a CI system — exist for the day the work outgrows a command line, and parallel makes no claim on their territory.
The remote chapter is a promise, not a memory
This guide verified local work only. SSH distribution (chapter 11) is described from the manual because the lab had no SSH server; treat its first run on your machines as the experiment it is.
Version drift is real
The tool is actively developed and the
version is a date. Options arrive
(--retry-failed is younger than the
rest of chapter 9), and packaged builds
differ from upstream ones — the
citation behaviour in chapter 3 differs
between the Debian package and upstream
for exactly this reason. parallel
--version and the local man parallel
are the last word for the build in
front of you.