1. A method of scheduling a plurality of tasks on one or more processors, comprising: determining a type for each task of the plurality of tasks; accessing a collection of actual execution times of previously executed tasks of said type; identifying actual execution times of the previously executed tasks of said type within a time period; determining statistically the expected execution time for each said task based upon the identified actual execution times; grouping tasks from the plurality of tasks into respective groups such that each grouped task is in a same group as other grouped tasks to which said each grouped task has at least one dependency; determining an expected group execution time for each of the respective groups based upon the estimated expected execution time of each task in said each of the respective groups; and scheduling the respective groups for execution on the one or more processors based upon the determined expected group execution time for each of the respective groups.