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!
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
¿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. –
"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. –