A p (producer) is a component that sends task messages.
A q (queue) is a buffer that stores task messages.
A c (consumer) is a component that receives task messages and do work.
We encapsulate a task as a message and send it to a queue. A worker process running in the other server in net will pop the tasks and eventually execute the job.