1. A method of implementing a data flow architecture, the method comprising: providing a circular storage; providing a plurality of storage sections within the circular storage; providing a consumer pointer and a producer pointer for each of the storage sections, the consumer pointer of each storage section being equivalent to a producer pointer of a next storage section, the next storage section being determined in accordance with the data flow architecture; indicating whether data is present within a next storage section to be processed by a next consumer, the next consumer being determined in accordance with the data flow architecture; if there is data present to be processed by the next consumer, processing the present data and updating the respective consumer pointer and its equivalent producer pointer to indicate that the present data has been processed; and continuing the processing until there is no more data present to be processed.