Is Ubuntu optimized for multicore CPUs?
Yes, Ubuntu is optimized for multicore CPUs and has been for many years.
Some background:
"Version 2.0 (of the Linux kernel) was released 9 June 1996. There were 41 releases in the series. The major feature of 2.0 was SMP support (that is, symmetric multi processing in a single system) and support for more types of processors."
Ubuntu is an operating system, a Linux distribution. A operating system consists of several software components such as a kernel, libraries, services/daemons, applications, etc.
Ubuntu uses the Linux kernel which makes use of symmetric multiprocessing (SMP) and multiple cores. It scales very well from low-end single-cpu single-core systems to high-end supercomputer clusters with thousands of multi-core CPUs.
Ubuntu ships with hundreds of libraries, some of which are multi-threaded and thread-safe, some of which are not. In some cases it makes sense for them to be multi-threaded, in others it is not applicable, generally possible or does not make much sense.
Ubuntu ships with hundreds of applications, some are coded to make use of multi-core CPUs, some are not. In some cases it does make sense to code the application as such, in other cases its not possible. Not all applications that could or should make use of multiple cores do so.
Example it makes sense for a game to use multi-core for graphics, audio, network, physics, etc. But it does not make sense for a calculator, screenshot tool, suduko, or menu editor to be multi-core aware.
Ubuntu's kernel supports multiple CPU for a long time now, does not really mater if its multi-core or multiples CPUs in one system, they will be handled perfectly.
One thing you have to be aware of though, just because a system has support for several CPUs/cores and those are present in a system it does not mean your applications will automatically run faster. You get told the opposite a lot now a days, its a marketing thing.
For an application to take advantage of several CPUs/cores at the same time it needs to be built to share the process load over those CPUs/cores.
Ie: lets say you are running something as simple as wordpad
in Windows and you are opening a huge text file with it, the loading time will be the same either you have 1 CPU or 1 zillion CPUs (for CPUs with same bus speed and similar architecture ofc).
The same goes with Linux Kernel and the Ubuntu distro, if an application is build for a single thread then there is nothing more CPUs will do.
One thing that the operative systems are doing now a days to optimize applications load over several CPUs/cores is the ability to run a process on a core that is not so loaded as the other are, thus balancing the load and making sure your multiple cores utilization is optimal. Tough in practice, the utilization of that technique only brings small speed improvements.
If you really want to see your cores shine you need to be doing heavy CPU utilization with programs that support symmetric multiprocessing, like video editing, etc.