One of the core features of early computers was that they were sequential in their operation.
This is relatively easy to code, conceptualize, and execute.
However, it presents some performance-limiting issues that eventually necessitated its replacement with parallel processing.
A sequential processor works on the concept of FIFO or First-In-First-Out.
All processes to be completed are added to a queue, which is then worked through in chronological order.
This is simple to process, understand, and model but has potentially severe performance limitations.
Most tasks need to access data in some form, which takes time.
The data can be accessed quickly within a few CPU cycles if stored in the CPU cache.
Data in system RAM can take longer to access, around 50 cycles.
For a good user experience, you want the computer interface to be smooth to use.
When you move the mouse, you want the mouse cursor to move.
When you press a key on the keyboard, you want the letter to be typed on the screen.
Each of these actions takes processing time.
A sequential processor adds them to the back of the queue.
Solutions
The solutions to these problems were out-of-order processing and pipelining.
It even becomes possible to configure a superscalar pipeline architecture.
In out-of-order processing, a scheduler tries to optimize the ordering of tasks.
It can also interrupt the processing of a task if it needs to wait on something.
Sequential processors were eventually replaced with out-of-order processors that could adjust and optimize the order of execution.
All modern CPUs are out-of-order processors.