The era of cloud computing allowed the instant scale up of provided services into massive capacities without the need for investing in any new on site infrastructure. Hence, the interest of this type of services has been increased, in particular, by medium scale entities who can afford to completely outsource their data-center and their infrastructure. In addition, large companies may wish to provide support for wide range of load capacities, including peak ones, however, this will require very higher costs in order to build larger data centers internally. Cloud services can provide services for these companies according to their need whether in peak load capacity of low ones. Therefore, resource sharing and provisioning is considered one of the most challenging problems in cloud based services since these services have become more numerous and dynamic. As a result, assigning tasks and services requests into available resources has become a persistent problem in cloud computing, given the large number of variables, and the increasing types of services, demand, and requirement. Scheduling services using a limited number of resources is problem that has been under study since the evolution of cloud computing. However, there are several open areas for improvements due to the large number of optimization variables. In general, the scheduling of services on available resources is considered NP complete. As a result, several heuristic based methods were proposed in order to enhance the efficiency of cloud systems. Since the problem has several optimization parameters, there are still several improvements that can be done in this area. This chapter discusses the formalization of the problem of scheduling multiple tasks by single user and multiple users, and then presents a proposed solution for each individual case. First, an algorithm is presented and evaluated for optimum schedule that allocates a number of subtasks on a given number of resources; the algorithm was shown to be linear vs. number of users. Then, an algorithm is presented to address the problem of multiple users allocations, each, with multiple subtasks. The algorithm was design using the single user allocation algorithm as a selection function. Since, this problem is known to be NP complete, heuristic based methods are usually used in order to provide better solutions. Therefore, a green evolutionary based algorithm is proposed in order to address the problem of resource allocation with large number of users. In addition, the algorithm presents allocation schedule with better utility, while the execution time is linear vs. different parameters. The results obtained in this work show that it overcomes the outcome of one of the most efficient algorithms presented in this regard that was based on game theory. Further, this method works with no restrictions on the problem parameters as opposed to game theory methods that require certain parameters restrictions on cost vector or compaction time matrix. On the other hand, the main limitation of the proposed algorithm is that it is only applicable to the scheduling problem of multiple tasks that has one price vector and one execution time vector. However, scheduling multiple users, each with subtasks that have their own price and execution time vector, is very complex problem and beyond the scope of this work, hence it will be addressed in future work.