1. A method of dynamically scheduling application tasks in a distributed task-based system, the method comprising: considering potential task scheduling actions for each application on a node; determining a predicted cost for each of the potential scheduling actions; and selecting a scheduling action that minimizes the predicted sum cost for all applications running on the node.