A program is CPU bound if it would go faster if the CPU were
faster, i.e. it spends the majority of its time simply using the
CPU (doing calculations). A program that computes new digits of π
will typically be CPU-bound, it's just crunching numbers.
A program is I/O bound if it would go faster if the I/O
subsystem was faster. Which exact I/O system is meant can vary; I
typically associate it with disk. A program that looks through a
huge file for some data will often be I/O bound, since the
bottleneck is then the reading of the data from disk.