* Run some code from A
* Save state, context switch
* Run some code from B
* Save state, context switch
* Deal with locking, synchronisation, etc
vs * Run some code.
There is absolutely no instances where [num threads] > [num cores] is as efficient as not using more threads than cores.
Most networking servers should be dealing with hundreds or thousands of concurrent connections.