1. A computer-implemented method comprising: receiving, by a runtime engine, an execute command from a management process, the execute command instructing the runtime engine to execute an application, the management process operating independently of the runtime engine; executing the application inside the runtime engine in response to the execute command, the application being implemented by an application file comprising a plurality of data blocks, the application executing on an operating system configured to generate a thread identifier for each thread executing on the operating system; determining, by the runtime engine, a pseudo thread identifier as a function of a first time value indicating when a thread was created and an associated thread identifier generated by the operating system for the thread when the thread was created; sending, by the runtime engine, a thread start message comprising the pseudo thread identifier to the management process, the thread start message comprising the first time value indicating when the thread was created; detecting, by the runtime engine, a plurality of read operations performed by the executing application on the plurality of data blocks; sending, by the runtime engine, a plurality of read messages to the management process, each read message being sent after the runtime engine has detected at least one of the plurality of read operations; storing, by the management process, information included in the plurality of read messages in a transcript file, the transcript file including an access order for the plurality of data blocks; and determining, by a computing device, an order in which to download the plurality of data blocks to a client computing device based at least in part on the access order stored in the transcript file.