task_processor Tasks have different time to complete Each task assigned for particular user Tasks for particular user has to be processed in the same order it was aded to queue. Task 1 should be completed before start of Task 2. Tasks for each particular user has to be processed in the separate thread Threads have to be stored in a pool. Pool has to be increased on demand.