Preemptive multitasking gives the illusion that a computer is running more processes than it has CPUs. Shared memory multiprocessing gives the illusion that processes are running in the same memory space (they don't because of the L1 cache) so that developers don't have to deal with message passing. Which is stupid because message passing is WAY easier to reason about.
The result of all this stage magic is that new side channel attacks keep surfacing, and they'll never stop.