I have a dual core processor and according to the explanation I\'m able to use only 2 threads but actually I\'m able to launch more than 2 threads at same time:
Here
You can use more threads than you have processor cores. This can have several benefits: you can hide communication (e.g., file I/O or network) with computation, or get more processor time in time-slicing systems. With two cores, only two threads will physically be executing at the same time, but having more threads can increase performance. It's something you need to tune.
The term threads usually covers three abstraction layers:
The 4 threads you said are launched by the application are from category 1 (user threads), while the value 2 returned by that function refers to category 3 (hardware threads). Since the mapping is N:M across the layers, you can see that you can have several user threads mapped to a smaller number of hardware threads.
Having said this, typically starting more than 2x the number of hardware threads if you are doing intensive computations will hurt performance due to context switches and resource contention.
There's a difference between optimal and possible results; there also is a difference between threads phisically and theoretically running at the same time. In a dual-core computer, there are 2 CPUs, that are able to execute two threads phisically at the same time. But the significance of any threading system/thread library is that you are able to create logically as meany threads as you want. These threads won't really run at the same time, they'll be switched over periodically instead to make the illusion as if they were running simoultaneously.
The first called paralell programming and the second one is multi tasking which can be done even in a single processor machine
You can always run multiple threads, even on single core machine. Though, they can't run in parallel. (more than 2 in your case)
For example, one thread does the GUI, the other fetches some work from the server...
See this for a deeper explanation.