Messages are asynchronously added to a work queue and are removed and processed in FirstInFirstOut order by a group of one or more independent processes. Typically used where there is a high degree of independence in the processing of the messages and the work necessary for each message is time consuming so the advantages of the parallelism outweigh the complexity.