I have written a multi-threaded program that is running on Windows server 2012.
The program will create threads to take advantage of multiple CPUs and I can control the number of simultaneous threads it will create. Each thread will normally use 100% of a CPU for several minutes (it is a very CPU intensive calculation and no I/O is done). Over the life of the process it will create and destroy ~1000 threads.
Task Manager reports that the server has 10 cores and 20 logical processors. I have tried many settings for the number of simultaneous threads, but the CPU utilization as shown from task manager never goes above ~30%. When I look at each thread, none is using more than ~3% total CPU - when they should be using 100%.
Another point to note: if I run two of these processes at the same time each will use ~30% of the available CPU.
I have run the same program on my 4-core Windows 10 laptop and have no problem with it using all the CPU.
Can anyone see a reason why Windows Server 2012 would limit my process to ~30% of the total CPU available?