There is no such concept as "master thread". Essentially, all threads are equal in this respect: in any thread, you can create and start other threads. (And then the threads can have different priorities, apartment states, anything.)
The methods of doing these are: 1) creating a thread using thread constructor, 2) using a thread from a
thread pool, 3) using
BackgroundWorker
:
http://msdn.microsoft.com/en-us/library/xx3ezzs2.aspx[
^],
http://msdn.microsoft.com/en-us/library/5cykbwz4.aspx[
^],
http://msdn.microsoft.com/en-us/library/system.threading.threadpool.aspx[
^],
http://msdn.microsoft.com/en-us/library/kbf0f1ct.aspx[
^],
http://msdn.microsoft.com/en-us/library/4yd16hza.aspx[
^],
http://msdn.microsoft.com/en-us/library/vstudio/system.componentmodel.backgroundworker[
^].
The idea to create many threads (essentially, considerably more that the total number of CPU cores on the system) would be quite questionable. It can only reduce overall throughput. This idea of having a thread per item (whatever the item is) can be justified only if the items should implement
logically independent behavior overlapping in time. If this is simply few nearly identical tasks which
can be done in parallel, it would be a bad excuse for actually doing it in parallel. Think about doing it in sequence, to reduce the performance overhead.
However, a completely different story is using TPL. It is based on threads, but different tasks don't have to be on different threads. The system can properly optimize the performance, well or not so well, but this is not as crazy as using N threads. So, this is the alternative to threads you can consider. Please see:
http://en.wikipedia.org/wiki/Parallel_Extensions#Task_Parallel_Library[
^],
http://msdn.microsoft.com/en-us/library/dd460717%28v=vs.110%29.aspx[
^].
—SA