Typically, applications that express concurrency requirements with threads
need not take into account the number of available processors. The performance
of the application improves transparently with additional processors.
Numerical algorithms and applications with a high degree of parallelism,
such as matrix multiplications, can run much faster when implemented with
threads on a multiprocessor.