Computers in the current times are indispensable to mankind. They perform many tasks in much less time, when compared to humans, opening up new paths of exploration. One important aspect of computers is multi-tasking, which enables a system to execute multiple tasks simultaneously. The scheduler causes the processor to perform context switching among the various processes. It primarily divides the CPU time to various processes, based on a specific policy related to response time, throughput, and user interactivity. Some of the criteria which are considered while selecting a good scheduling algorithm include CPU utilization time, Load Average, Response time, Turnaround time, and throughput. Ideally, one should view this as an optimization problem. Throughput and CPU utilization should be maximized; where as other factors should be minimized. Occasionally, it requires to put the variance of any aspect, to a minimum value, rather than minimizing the aspect itself. Consistency of the aspect is preferred over inconsistency.