Question: Am newbie to thread concept. I have little confusion over thread.

What is the difference between normally calling the method and calling the method using threading. What is the use of thread.join?

Example:
In the code behind file: normally calling the method

```
Getdata();

```

By using thread am calling this methd:

```
Thread th=new Thread(new ThreadStart(Getdata));

th.Start();

```

Which one yields high performance

Answer: 
Main reason to have more than one thread is to speed up calculations. Each thread would perform one part of complex calculation, on one part of input data. If you have as many threads as there are processor cores each thread will run freely, and number of calculations per second will increase. Increasing the number of threads above this point (number of cores) will not give much benefit. Care must be taken about other parts of processor architecture (memory, processor cache, some other shared resource) so that it does not become a bottleneck and force all the threads to wait on it most of the time.

Second reason to have threads is to remove all lengthy operations away from main thread, which is usually GUI thread. Application is then more user friendly, and user will not experience window "freeze".

Third reason to have threads is to make the code both a little bit faster and simpler at the same time. Let's say you have a complex operation with your data and with shared resources (web service, database, some specialized hardware, printer), and the complex operation can be separated in several simpler operations, and parts of the operation are omitted depending on the data. You could have a "pipeline" of threads, where each thread does one simple stuff with the data, has an exclusive access to some resource, and sends the result to other thread in the pipeline. Overall process would run faster than if you would have only one thread that runs every bit data from start to the end, but the code would also not be too much complex.
The purpose of threading is to fulfill the need to run separate code in the same time. In general, if you have a source-code, all the lines in your source-code will be executed sequentially. Let's consider the case when you are sending an email to 20 receipients. If you send all the mails one after the other, then the total waiting time is the total time while your emails are delivered. If you create 20 threads, one for each email sending, then your waiting time will be roughly the time of your slowest mail, that's approximately 20x speedup. Also, let's consider you are playing a chess game against the computer. The engine has to constantly think about the best possible variation, but in the meantime its time is decreasing and it must be displayed graphically, also, sometimes sound effects should be displayed and so on.