A computer-implemented method comprising; tracking assignments by a dispatcher of tasks to servers in a data structure, wherein the data structure includes at least one entry for each server, with a number of entries per server being based on a capacity of the server, with servers with greater capacity having more entries than servers with lesser capacity, with an entry representing either an assignment of a task to a server or an available slot indicating an availability of a server to execute a task; receiving a first dispatch request for execution of a first task; searching the data structure to find a first entry indicating a first available slot, the first available slot associated with a first server; assigning the first task to the first server, wherein the assigning includes updating the first entry, in the data structure, to track the execution of the first task by the first server; receiving a second dispatch request for execution of a second task; searching the data structure to find a second entry indicating a second available slot, the second available slot associated with a second server, wherein the second server has greater capacity than the first server, and wherein the second server is faster than the first server; assigning the second task to a second server, wherein the assigning includes updating the second entry, in the data structure, to track the execution of the second task by the second server; receiving, before the first task has completed, an indication that the second server has completed the second task; updating the second entry to indicate completion of the second task by the second server and an availability of the second server for task assignment; receiving a third dispatch request for execution of a third task; and assigning the third task to the second server, rather than the first server, in response to detecting the updated second entry indicating completion of the second task by the second server. tracking assignments by a dispatcher of tasks to servers in a data structure, wherein the data structure includes at least one entry for each server, with a number of entries per server being based on a capacity of the server, with servers with greater capacity having more entries than servers with lesser capacity, with an entry representing either an assignment of a task to a server or an available slot indicating an availability of a server to execute a task; receiving a first dispatch request for execution of a first task; searching the data structure to find a first entry indicating a first available slot, the first available slot associated with a first server; assigning the first task to the first server, wherein the assigning includes updating the first entry, in the data structure, to track the execution of the first task by the first server; receiving a second dispatch request for execution of a second task; searching the data structure to find a second entry indicating a second available slot, the second available slot associated with a second server, wherein the second server has greater capacity than the first server, and wherein the second server is faster than the first server; assigning the second task to a second server, wherein the assigning includes updating the second entry, in the data structure, to track the execution of the second task by the second server; receiving, before the first task has completed, an indication that the second server has completed the second task; updating the second entry to indicate completion of the second task by the second server and an availability of the second server for task assignment; receiving a third dispatch request for execution of a third task; and assigning the third task to the second server, rather than the first server, in response to detecting the updated second entry indicating completion of the second task by the second server.