1. A method of scheduling a thread of a plurality of threads in a thread scheduler, each thread of the plurality of threads having a thread index and a thread priority, the method comprising: identifying in a runnable thread identification module of the thread scheduler a plurality of runnable threads from the plurality of threads, wherein the runnable threads are those threads that are runnable at the start of a scheduling cycle and generating in the runnable thread identification module of the thread scheduler a plurality of runnable thread indexes, wherein the runnable thread indexes are the thread indexes of the identified runnable threads, and wherein the scheduling cycle is a clock cycle of a clock signal and the start of the scheduling cycle is established by an edge of the clock signal; determining in a priority ranking module of the thread scheduler a priority ranking for the runnable thread indexes according to the thread priorities; determining in a round robin ranking module of the thread scheduler a round robin ranking for the runnable thread indexes; ranking in a thread index ranking module of the thread scheduler the runnable thread indexes based on the priority ranking and the round robin ranking, the ranked runnable thread indexes having the highest priority being ranked according to the round robin ranking and the remaining runnable thread indexes being ranked according to the priority ranking; identifying in an unrunnable thread identification module of the thread scheduler the thread index of any unrunnable thread as an unrunnable thread index based on at least one same cycle signal received for a runnable thread after the start of the scheduling cycle, the same cycle signal indicating that the runnable thread has become unrunnable during the scheduling cycle, wherein the same cycle signal indicates a data cache miss or an instruction cache miss or an instruction exception or a wait on arithmetic operation or an instruction synchronization; and selecting in a thread index selector of the thread scheduler the highest ranked thread index that is not an unrunnable thread index based on any thread index identified as an unrunnable thread index by the unrunnable thread identification module.