1. An information processing apparatus comprising: a memory configured to store a data queue comprised of individual data, wherein the data queue comprises a head position and a tail position; and at least one processor configured to process a data generation thread and a plurality of data consumption threads, the data generation thread placing generated data into the data queue by performing the steps of: determining what type of data is located at an element identified by the head position of the data queue; if the head position data contains thread identification relating to one of the plurality of data consumption threads, remove the head position element from the data queue and directly assign the generated data to the data consumption thread associated with the thread identification information for processing the generated data; if the head position data does not contain thread identification of any of the plurality of data consumption threads, pushing the generated data at the tail position of the data queue by the data generation thread; a data consumption thread of the plurality of data consumption threads, processing data of the data queue, by performing the steps of: checking the data located at the head position of the data queue to determine whether the data queue is empty, wherein the data queue is empty if the data at the element in the head position stores thread identification data; based on the checking, if the data queue is not empty, remove and process the data from the data queue by the data consumption thread; based on the checking, if the data queue is empty: insert into the data queue an element containing the thread identification of the data consumption thread at the tail position of the data queue; and suspend the data consumption thread to allow for further processing of the processor.