Действительно ли JBoss Drools выполняет все правила параллельно?

Я прочитал много документации по JBoss Drools, но не могу найти однозначного ответа на вопрос, все ли правила выполняются одновременно (конечно, они запускаются одновременно). Более конкретно, для одного входа и набора правил, скажем, 1000 правил, выполняйте условия "когда" и "затем" в каждом правиле, выполняйте последовательно один за другим или параллельно в одно и то же время.

С одной стороны, алгоритм rete подразумевает параллелизм, конечно, когда выбранные узлы свернуты. Однако после оптимизации узлов выполняется ли оценка последовательно? И узлы бета-памяти и соединения выглядят так, как будто они должны выполняться одновременно, но так ли это?

Кроме того, документация Drools говорит о "последовательном режиме", говоря, что по умолчанию он отключен. Так что же включено, параллельный режим? И есть опция maxThreads, подразумевающая многопоточность.

С другой стороны, мне сказали, что код не использует многопоточность и поэтому вычисляет одновременно, но выполняет, по большей части, последовательно.

Кто-нибудь видел какие-либо документы, которые подтверждают случай в любом случае?

Спасибо!

2 ответа

Решение

В стандартном алгоритме rete нет указаний на параллелизм. Набор конфликтов создается из согласованных правил, затем в повестке дня применяется стратегия применения этих правил по очереди.

За прошедшие годы был предпринят ряд усилий, чтобы распараллелить часть (и) сегмента, либо на этапах подбора, либо на стрельбе.

Большая проблема при одновременном применении всех правил - детерминированное выполнение.

В настоящее время мы изучаем различные стратегии параллельного и параллельного сопоставления в Drools. Мы также рассмотрим одновременное срабатывание правил, но нам нужно найти более надежные способы, чтобы пользователи могли указывать, что может выполняться параллельно, а что нет; так что пользователь получает детерминированное исполнение там, где ему это нужно.

Похоже, что вы решили проблему, но я могу предоставить вам дополнительную информацию, если вам нужно. В исходном коде Drools используется параллельная библиотека, показана веб-ссылка на github: https://github.com/kiegroup/drools/blob/master/drools-core/src/main/java/org/drools/core/concurrent/ExecutorProviderImpl.java.

Некоторые моменты,

  1. Конечно, фабрика потоков используется в операторе. И вы можете найти библиотеку потоков, если прочитаете исходный код, показанный в этой веб-ссылке.

  2. Также вы спрашиваете о maxThread, пул потоков, используемый в Drools, имеет размер пула, как показано в исходном коде. newExecutor = new ThreadPoolExecutor( Pool.SIZE, Pool.SIZE, 60L, TimeUnit.SECONDS,new LinkedBlockingQueue<Runnable>(), threadFactory );

Другие вопросы по тегам