1. A method, in a data processing system, for composite contention-aware task scheduling, wherein the data processing system comprises a number of processors, the method comprising: decomposing an application into application threads, compute tasks, and memory tasks, wherein a compute task comprises a group of instructions that perform computational functions and wherein a memory task is a group of instructions that perform memory access operations; determining a number of application threads and a number of concurrent memory tasks or concurrent compute tasks, wherein the number of application threads and the number of concurrent memory tasks or concurrent compute tasks are less than or equal to the number of hardware threads of the processors; and scheduling the application threads, the compute tasks, and the memory tasks on the number of processors based on the number of application threads and the number of concurrent memory tasks or concurrent compute tasks.