1. A system for executing an application across multiple computing devices, the system comprising: a first computing device comprising a first memory unit and a first computing resource, the first computing device configured to implement a first virtual machine operable to: execute code for the application, the application requesting execution of a first thread and a second thread; execute the first thread using the first computing resource of the first computing device; and assign the second thread of the application to a second computing device before any scheduling or assignment of the second thread to a computing device other than the second computing device; and the second computing device, remote from the first computing device, the second computing device comprising a second memory unit and a second computing resource, the second computing device configured to implement a second virtual machine operable to: execute the second thread using the second computing resource of the second computing device to generate a thread output, wherein the execution of the second thread includes steps to: identify state information associated with the second thread; lock the state information, wherein locking the state information prevents the first computing device from modifying the state information associated with the second thread; transmit, by the first virtual machine, a copy of the state information to the second computing device; update the state information with the thread output generated by the second computing device; and unlock the state information associated with the second thread.