Separating different parts of a program into different processes seems (to me) to make a more elegant program than just threading everything. In what scenario would it make
Well apart from advantages of using thread over process, like:
Advantages:
Consider few disadvantages too:
As to the important part of your question "When should I use a thread?"
Well you should consider few facts that a threads should not alter the semantics of a program. They simply change the timing of operations. As a result, they are almost always used as an elegant solution to performance related problems. Here are some examples of situations where you might use threads: