2012-05-14 14 views
5

He leído mucha documentación de JBoss Drools, pero no puedo encontrar una respuesta definitiva si todas las reglas son ejecutadas al mismo tiempo (sin duda son disparadas concurrentemente). Más específicamente, para una sola entrada y un conjunto de reglas de digamos 1000, las condiciones "cuándo" y las condiciones "entonces" en cada regla se ejecutan secuencialmente una por una o en paralelo al mismo tiempo.¿JBoss Drools realmente ejecuta todas las reglas en paralelo?

Por un lado, el algoritmo rete implica paralelismo, ciertamente cuando los nodos seleccionados se contraen. Sin embargo, una vez optimizados los nodos, ¿la evaluación es secuencial? Y la memoria beta y los nodos de unión parecen que deberían ejecutarse al mismo tiempo, pero ¿verdad?

Además, la documentación de Drools habla de "modo secuencial", diciendo que esto está desactivado por defecto. Entonces, ¿qué está activado, modo paralelo? Y hay una opción maxThreads que implica enhebrar.

Por otro lado, me dijeron que el código no utiliza el subprocesamiento, por lo que se evalúa al mismo tiempo pero se ejecuta, en su mayor parte de forma secuencial.

¿Alguien ha visto alguna documentación que muestre el caso de alguna manera?

Gracias!

Respuesta

9

No hay indicación de paralelismo en el algoritmo de rete estándar. Un conjunto de conflictos se produce a partir de reglas coincidentes, luego la agenda aplica una estrategia para activar esas reglas a su vez.

A lo largo de los años se han realizado varios esfuerzos para paralelizar las partes de la rete, ya sea durante las etapas de emparejamiento o disparo.

Un gran problema al disparar todas las reglas en paralelo es la ejecución determinista.

Actualmente estamos explorando varias estrategias para la coincidencia concurrente y paralela, en Drools. También exploraremos el lanzamiento simultáneo de reglas, pero debemos encontrar formas más sólidas para que los usuarios indiquen qué se puede disparar en paralelo y qué no; para que el usuario obtenga una ejecución determinista donde lo necesite.

+0

Muchas gracias, agradezco su respuesta. He estado siguiendo su trabajo de BRMS en el discurso de la regla y las cumbres redhat y he evaluado drools para adopción. Descubrí que las bibliotecas y tecnologías de drool son muy fáciles de entender y simples de integrar en un sistema BRMS a medida. La mejor de las suertes paralelizando, supongo que un grupo de agenda independiente por acción es una solución demasiado burda :) – user1393285

+0

¿Podría explicar las consecuencias de la ejecución no determinista?Me imagino que todavía obtendrías el resultado correcto, quizás la desventaja sería la ejecución de reglas que no son necesarias. –

+0

"Supongo que un grupo de agenda independiente por acción es una solución demasiado burda :)" Si elimina todo el uso compartido entre grupos, y también asegura que no haya superposiciones en mutaciones entre grupos, esto sería posible. En el momento en que un grupo puede cambiar un hecho, que otro grupo podría leer potencialmente, tiene bloqueos a nivel de mesa o motor. La única forma de evitarlo es usar un estilo optimista de bloqueo MVCC. –

1

Parece que ha resuelto el problema, pero aún puedo brindarle más información si lo necesita. Hay una biblioteca simultánea utilizada en el código fuente de Drools, se muestra el enlace web de github, https://github.com/kiegroup/drools/blob/master/drools-core/src/main/java/org/drools/core/concurrent/ExecutorProviderImpl.java.

Algunos puntos,

  1. Claro, la fábrica de hilos se utiliza en el ejecutor operación. Y puede encontrar la biblioteca de hilos si lee el código fuente que se muestra en este enlace web.

  2. También preguntas sobre maxThread, el threadpool usado en Drools tiene un tamaño de grupo como se muestra en el código fuente. newExecutor = new ThreadPoolExecutor(Pool.SIZE, Pool.SIZE, 60L, TimeUnit.SECONDS,new LinkedBlockingQueue<Runnable>(), threadFactory);

Cuestiones relacionadas