- They will all run at the same time
- The load will be distributed by your OS to be worked on as many cores as there are available. The time might not be proportional to the number of threads. Here is a silly example why. Assume you have one job that you want to do three times, and it takes the same amount of time every time (1 unit of time). You have two cores. Assume there is nothing else running.
- Case one: you only have one thread. In this case, the thread runs on one core, and the whole thing takes 3 units of time to complete. Total time: 3
- Case two: You have two threads. In one unit of time, the job gets done twice (once per core). You then have to wait a whole unit of time for the third iteration to complete. Total time: 2
- Case 3: You have 3 threads. Your OS will try and make everything fair, and so will split up the time evenly between the three processes. By then end of unit 1, NONE of them will be completed. By unit 2 they will all be done. (see case above). Total time: 2
Starting more threads will not really hurt your performance much (the cost of starting a thread is less than 1MB) but it might not help either.
The only way to know what would be faster to do is it test it, but use the following rules as a guide: Use at least the same number of threads as you have cores. Additionally, if process has lots and lots of memory access all over the place it may actually be faster to have more threads than cores (memory access is very slow compared to executing other instructions, and the OS will fill the time with real execution of something else that does not have to wait).