I was thinking that we don't need programs to share CPUs anymore now that each machine has so many of them. We could have an OS which binds each program to one CPU. When it runs out of CPUs, it suggests to close an existing program. Then programs don't need to pay context-switching cost.
A typical desktop OS runs ~100 processes before you get to run anything. Even if you would delegate one core to system stuff, most programs are multi-threaded, so you are going to run out of cores quickly.
It's a shame a multiple physical CPU machine never took off for workstations. It would have been awesome if you could delegate a real weaker CPU (physical die) for OS background tasks and then had a stronger CPU for userspace workloads.