JobShell should support multiple concurrent processes, either on the same server or on different servers. Currently, JobShell claims a lock and prevents any other instances from running.
In particular for Provisioner actions, sequential consistency must be maintained. ie: Jobs must be processed in the order they were queued. One option might be to run one queue per action, so (eg) Provisioner jobs would still run serially but could run in parallel with Reporting jobs.
A more sophisticated option would be to allow parallel running when the same subject is not involved, which implies some sort of plugin specific logic. For example, Provisioner jobs for different CO People could run at the same time, but both would be blocked if a reprovision all were ahead in the queue.
There should probably be a maximum number of concurrent jobs permitted, which could be a bit tricky to implement using database locks.