1. A computer implemented method for scheduling tasks, comprising: receiving a task request from an application, the task requesting execution by a central processing unit (CPU) using a scheduler, the task having a unique task signature associated with the task, the task signature related to a number computed by the scheduler and representing at least one call to a method in an application programming interface (API); estimating an execution time for the task based on an at least one execution metric stored in a state model for the application, the state model being representative of a plurality of tasks requested by the application and including a separate state for each task being requested, with each separate state including an information related to a position of an at least one user within the state model when a task is being executed on behalf of the at least one user, the state model further comprising at least edge attached to a first execution state, the at least one edge representative of a transition from the first execution state to a second execution state; and scheduling the task for processing on the CPU based on the estimated execution time using the scheduler.