1. A method comprising: dividing a plurality of threads into a first set of threads corresponding to a first domain and a second set of threads corresponding to a second domain, the first set of threads being identified as being capable of being executed in parallel without conflict with respect to the second set of threads based on a determination that the first set of threads operates on a first set of data items and the second set of threads operates on a second set of data items that is different from the first set of data items; assigning a first processor of a plurality of processors to the first domain and a second processor of the plurality of processors to the second domain; detecting that the first processor is overutilized by the first set of threads by (i) comparing a utilization associated with the first domain with a threshold utilization, and (ii) determining that the utilization associated with the first domain exceeds the threshold utilization; and in response to detecting that the first processor is overutilized by the first set of threads, (i) dividing the first set of threads corresponding to the first domain into a third set of threads and a fourth set of threads, the third set of threads being identified as being capable of being executed in parallel without conflict with respect to the fourth set of threads based on a determination that the third set of threads operates on a third set of data items and the fourth set of threads operates on a fourth set of data items that is different from the third set of data items, and (ii) assigning the first processor to the third set of threads of the first domain and a third processor of the plurality of processors to the fourth set of threads of the first domain.