There are two classes of problems where the application of threads is a good idea.
Note:
Threads are like overloading operators in C++; it may seem like a good
idea (at the time) to overload every single operator with some interesting use, but it makes
the code hard to understand.
Similarly with threads, you could create piles of threads, but the additional
complexity will make your code hard to understand,
and therefore hard to maintain.
Judicious use of threads, on the other hand, will result in code that is functionally
very clean.
Threads are great where you can
parallelize operations—a number of
mathematical problems spring to mind (graphics, digital signal processing, etc.).
Threads are also great where you want a program to perform several independent
functions while sharing data, such as a web-server that's serving multiple clients
simultaneously.
We'll examine these two classes.