multithreaded worker that now reads from the work queue