As far as different user applications are concerned, resource scheduling algorithms allocate network resources like bandwidth, time slots, and power. Most commonly used criteria such algorithms base their performance on is the overall performance of the network, fairness, and QoS (Quality of Service) requirements for different types of services. For example, in a cellular network, a scheduling algorithm can be designed to enhance connection for users with weak signal, or give preference to voice calls over data downloads. Different algorithms are implemented based on user preferences and network conditions. Such algorithms include Round Robin, Proportional Fair, and Maximum Throughput.