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
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.