1. A method of scheduling a thread of a plurality of threads, each thread of the plurality of threads having a thread index and a thread priority, the method comprising: determining a priority ranking for the thread indexes according to the thread priorities; determining a round robin ranking for the thread indexes; ranking the thread indexes based on the priority ranking and the round robin ranking, the ranked thread indexes having a highest thread priority being ranked according to the round robin ranking and the remaining thread indexes being ranked according to the priority ranking; identifying the thread index of any unrunnable thread as an unrunnable thread index; and selecting the highest ranked thread index that is not an unrunnable thread index.