1. A method for processing multiple streams of data on a plurality of execution threads comprising the steps of: selecting data from at least one of a plurality of data sources in dependence on the availability of storage in a data storage means; allocating an address in the data storage means for the data thus selected; loading selected data at the data address thus allocated; constructing an execution task comprising the selected data source, the data address, and an execution address; queuing the task with other previously constructed tasks; determining which processing resources are required for each task; selecting tasks for execution in dependence on the processing resources available; distributing tasks selected for execution across a plurality of processing threads; and determining whether any of the threads will stall because of data dependencies; repeatedly selecting a subset of threads to be active that will not stall due to said data dependencies; and, executing active threads.