In multi-core applications your threads work independently for some time (for the sake of example) then they finish their job and you need to synchronize the result of their work, which is a single-threaded task. i.e. if you have 4 cores and I only 2, but doesn't mean you will be twice as fast as I am, even if the application is perfectly programmed to use more cores.