Spooling provides a job pool on disk. In order to increase CPU utilization, jobs in the pool may be scheduled in different ways, such as, first-come first-served, shortest job first, priority basis, etc.
The most important aspect of job scheduling is the ability to multiprogram. The operating system keeps several jobs (a subset of jobs in the job pool) in memory at a time. During the execution of one job, if it waits for an I/O operation to complete, the operating system switches to and executes another job. In this way, as long as there is always some job to execute, the CPU will never be idle.