These "surprising" results really shouldn't surprise you. Multithreading a compute-intensive application can only try to exploit the presence of multiple CPUs or cores, but even so the added overhead of multithreading can easily wipe out all gains. Multithreading really shines only when it facilitates I/O overlap.