1. A method comprising: executing a plurality of threads in parallel by a plurality of processing cores, the plurality of threads including a first thread and a second thread, the plurality of processing cores including a first processing core and a second processing core; detecting that a processor core executing the second thread is expected to wait idly for a completion of a task of the first thread; based on the detecting, identifying one of the plurality of threads as a thread to be moved; and in response to the identifying, moving the identified one of the plurality of threads from executing on the first processing core to executing on the second processing core.