CPU affinity certainly has a useful purpose; however, I said "needlessly". As in, what if every process on your system selected a CPU when it started, and just waited for that CPU, to the point of leaving other CPUs idle or underutilized? And what happens when you get stuck behind a process which requires a huge pile of CPU resources? The problem becomes even worse with batch processing: every process must run to completion before the next one for that CPU can run.
In a typical real-time system you don't have to deal with random processes screwing things up. Resources are meticulously allocated to individual tasks, and the tasks aren't allowed to randomly grab resources in the scenario you describe. It all has to be planned out in advance.