Does a work queue provide a mechanism to spread the load across tasks?

No. You should look at tasks more as observability concepts and a way to execute work in various ways using task runners (Dask, Ray, concurrent execution with async) rather than a way to distribute work across jobs in a pub-sub message-queue style.

Prefect creates flow runs from deployments, and each deployment has a work queue name associated with it – this is how Prefect knows which work queue should pick up runs from that deployment

If you need to spread the load of a large number of task runs for scale, you may try out Dask and Ray task runners allowing you to leverage distributed compute clusters