2012-07-06 8 views
5

El robo de tareas está disponible, por ejemplo, en el marco Fork/Join en la plataforma Java. (Ver How is the fork/join framework better than a thread pool?) - ¿es algo similar posible con OmniThreadLibrary?¿OmnithreadLibrary admite el "robo de trabajo"?


Trabajo robar: subprocesos de trabajo que se ejecutan sin cosas que hacer tareas pueden robar de otros hilos que todavía están ocupados.

+0

La Unidad OtlParallel tiene mención de esto y también ve esta publicación del blog: http://www.thedelphigeek.com/2011/01/parallel-for-implementation-1-overview.html – Shambhala

+0

Shamballa, este artículo describe el ForEach abstracción, no tenedor/Únete. – gabr

+1

Lo siento mucho, debería haber leído la pregunta más despacio y entendido mejor. – Shambhala

Respuesta

6

No sé si llamaría a esta técnica "robo de trabajo" pero, de hecho, OmniThreadLibrary mantiene todos sus núcleos ocupados cuando ejecuta Fork/Join abstraction.

Cuando utiliza Fork/Join, envía una tarea al grupo de cálculo llamando al Compute. Cuando llame al Value para obtener el resultado de la subcomputación o Await para esperar a que finalice la subcomputación y la subcomputación aún no ha completado su trabajo, Value/Await tomará otra tarea del grupo de cálculo y la ejecutará. Cuando finalice esta nueva tarea, nuevamente se verificará si la subcomputación ha completado su trabajo y, si no, procesará la siguiente subtarea.

Este mecanismo se describe con más detalle en el OmniThreadLibrary wiki.


EDITAR

No creo Tenedor/Join enfoque debería llamarse "trabajo robar". En la implementación de OmniThreadLibrary, el elemento de trabajo nunca se asigna a un hilo hasta que el hilo comienza a ejecutarlo. Y una vez que el hilo comienza a ejecutarlo, nadie puede robarlo ya que no habría ningún propósito en eso.

Cuestiones relacionadas