1. A method comprising: selecting a thread for execution; identifying a target performance state based on the thread; selecting a processor core from a plurality of processor cores; initiating a transition of the processor core to the target performance state if the processor core is not in the target performance state and none of the remaining cores in the plurality of cores shares a performance state-dependent resource and has a second target performance state that is shallower than the target performance state; and scheduling the thread for execution by the processor core.