1. A method comprising: providing a thread pool including a plurality of thread groups, each thread group including one or more threads; providing a CPU pool including a plurality of CPU groups, each CPU group including a plurality of physical CPUs, and each physical CPU including one or more CPU cores; receiving a plurality of tasks including I/O tasks and compute tasks; mapping each of the plurality of tasks to at least one thread group in the thread pool; and mapping each of the plurality of thread groups in the thread pool to at least one CPU group in the CPU pool; receiving performance parameters including a data processing rate (DPR) and an I/O processing rate (IOR) of CPU cores of a data processing system; monitoring the performance parameters including utilization of the plurality of CPU groups as the I/O tasks and the compute tasks are executed; comparing performance of the I/O tasks and the compute tasks running on the plurality of CPU cores; dynamically changing the mappings between the plurality of tasks and the plurality of thread groups and between the plurality of thread groups and the plurality of CPU groups based on the performance parameters to balance the performance between the I/O tasks and compute tasks; and adjusting the mappings between the plurality of tasks and the plurality of thread groups and between the plurality of thread groups and the plurality of CPU groups when the IOR is greater than the DPR.