1. A method of executing multithreaded instructions grouped into blocks, the method comprising: receiving an incoming instruction sequence at a front end of an execution pipeline; grouping instructions from the instruction sequence to form instruction blocks, where a first group of instruction blocks are a part of a first thread of execution and a second group of instruction blocks are a part of a second thread of execution; storing the first group of instruction blocks and the second group of instruction blocks in a scheduler array, where a first commit pointer points to a location in the scheduler array for a next block of the first group to be executed and a second commit pointer points to a next block of the second group to be execute; scheduling the instructions of the instruction blocks to execute in accordance with a position in the scheduler array; and tracking execution of the first thread and second thread to enforce a fairness policy using allocation counters to track a number of instruction blocks in the scheduler array for each thread.