1. A method comprising: analyzing a task to identify a first type of sub-tasks of the task; analyzing the task to identify a second type of sub-tasks of the task to be executed in parallel; maintaining a first pool of processing threads dedicated to execute the first type of sub-tasks to include a fixed number of processing threads for executing the first type of sub-tasks; maintaining a second pool of processing threads dedicated to execute the second type of sub-tasks to include a dynamic number of processing threads that automatically changes depending on a number of the second type of sub-tasks to be executed in parallel; monitoring for availability of threads in a first pool of processing threads; sequentially submitting, as processing threads in the first pool become free, at least one of the first type of sub-tasks associated with the task for execution by respective free processing threads in the first pool; executing, via the first pool of processing threads, the first type of sub-tasks based on availability of processing threads in the first pool, wherein executing the first type of sub-tasks based on availability of processing threads in the first pool includes initially detecting that all of the processing threads in the first pool are busy executing other sub-tasks of the first type; and executing, via the second pool of processing threads, the second type of sub-tasks in parallel.