Does the OS exploit multiple cores

Solution 1:

Generally, yes, the OS would distribute 4 instances of a program across 4 cores if the cores were available for use (i.e., other programs aren't using them). This could give you similar benefits compared to having 4 threads, except for potential overhead (e.g., 4 threads would most likely share one copy of any loaded dictionary, whereas 4 processes would most likely each load separate copies of the dictionary).

Solution 2:

To make use of all available cores, you need both (a) support from the OS, and (b) an application workload that can take advantage of multiple cores. Support from the OS is a given for all modern OS's, so this comes down to whether your application workload can take advantage of multiple cores.

If you are running multiple applications simultaneously, then you can benefit from multiple cores. If multiple programs are all trying to run at the same time, the OS will schedule them on multiple cores.

If you are using only a single application at a time, then it depends upon the application whether multiple cores will help you. In particular, it depends upon whether the application is written to be multi-threaded or single-threaded. A single-threaded application only does one thing at a time, and thus can only use a single core. A multi-threaded application creates multiple threads to do multiple things at a time, enabling the OS to schedule each thread on a different core and potentially enabling speedups on a multicore processor.

Applications need to be specially designed and written to use multiple threads and to take advantage of multiple cores, and many common applications don't benefit from multiple cores -- but some do. For instance, Photoshop is written so that if you ask it to do a computationally expensive task, it will break the task up into smaller pieces and distribute those pieces among multiple threads, so they can run on multiple cores. This required special programming from the Photoshop developers and takes a lot of extra effort from developers, so many or most applications haven't bothered to use this style of programming and won't benefit much from a multiple core machine -- but some will.

Given that you tend to run many independent programs at the same time, you'll probably see at least some benefits from a multi-core processor.