A method of managing code and data on one or more processor elements, in a processor system having one or more processor elements each having a processor unit and an associated memory, all of the processor elements being operable to access a main memory, the method comprising the steps of: under control of a policy module manager, running on each of the processor elements, assigning a selected one or more work queues from the main memory to a selected one or more of the processor elements according to a hierarchy of precedence, a work queue being a group of tasks which can be processed by multiple processor elements, a processor element loading code and data from the main memory into its associated memory to execute a task, the assigning step including: determining whether one or more work queues are schedulable, being work queues which can be accessed by processor elements, and have readiness, indicating that the work queue contains ready work, determining a per-processor-element priority value for one or more schedulable work queues having readiness and determining a Contention for each work queue, the Contention for a given work queue indicating the number of processor elements which are working on the given work queue; and for two or more schedulable and ready work queues having equal priority, assigning the work queue having the lesser contention; incrementing the Contention associated with a work queue in response to the work queue being assigned to a processor element; loading a policy module from the main memory or from another processor element for the selected one or more work queues to the selected one or more processor elements, wherein each policy module is associated with a respective work queue and determines how work in the work queue is to be loaded from the main memory and executed, each policy module being operable to manage its own context data defining the state of the processor element corresponding to that policy module; under control of the policy module, loading work from one or more of the selected one or more work queues into the associated memory of the selected processor element; performing the work with the selected processor element; and after completing the work or upon a pre-emption, returning control of the selected processor element to the policy module manager. under control of a policy module manager, running on each of the processor elements, assigning a selected one or more work queues from the main memory to a selected one or more of the processor elements according to a hierarchy of precedence, a work queue being a group of tasks which can be processed by multiple processor elements, a processor element loading code and data from the main memory into its associated memory to execute a task, the assigning step including: determining whether one or more work queues are schedulable, being work queues which can be accessed by processor elements, and have readiness, indicating that the work queue contains ready work, determining a per-processor-element priority value for one or more schedulable work queues having readiness and determining a Contention for each work queue, the Contention for a given work queue indicating the number of processor elements which are working on the given work queue; and for two or more schedulable and ready work queues having equal priority, assigning the work queue having the lesser contention; determining whether one or more work queues are schedulable, being work queues which can be accessed by processor elements, and have readiness, indicating that the work queue contains ready work, determining a per-processor-element priority value for one or more schedulable work queues having readiness and determining a Contention for each work queue, the Contention for a given work queue indicating the number of processor elements which are working on the given work queue; and for two or more schedulable and ready work queues having equal priority, assigning the work queue having the lesser contention; incrementing the Contention associated with a work queue in response to the work queue being assigned to a processor element; loading a policy module from the main memory or from another processor element for the selected one or more work queues to the selected one or more processor elements, wherein each policy module is associated with a respective work queue and determines how work in the work queue is to be loaded from the main memory and executed, each policy module being operable to manage its own context data defining the state of the processor element corresponding to that policy module; under control of the policy module, loading work from one or more of the selected one or more work queues into the associated memory of the selected processor element; performing the work with the selected processor element; and after completing the work or upon a pre-emption, returning control of the selected processor element to the policy module manager.