5

JBoss Drools の多くのドキュメントを読みましたが、すべてのルールが同時に実行されるかどうかについての決定的な答えを見つけることができません(確かにそれらは同時に実行されます)。より具体的には、単一の入力と、たとえば 1000 個のルールのルール セットの場合、各ルールで「when」条件と「then」条件を実行し、1 つずつ順番に実行するか、同時に並列に実行します。

一方では、rete アルゴリズムは並列処理を意味します。これは、選択ノードが折りたたまれている場合に特に当てはまります。しかし、ノードが最適化された後、評価は順次行われますか? また、ベータ版のメモリ ノードと結合ノードは同時に実行する必要があるように見えますが、そうでしょうか?

また、Drools のドキュメントでは「シーケンシャル モード」について言及されており、これはデフォルトではオフになっています。では、何がオンになっているのか、パラレル モードですか? また、スレッド化を意味する maxThreads オプションがあります。

一方で、このコードはスレッド化を利用していないため、評価は並行して行われますが、ほとんどの場合は順次実行されるとのことでした。

いずれかのケースを証明するドキュメントを見た人はいますか?

ありがとう!

4

2 に答える 2

10

標準の rete アルゴリズムには、並列処理の兆候はありません。一致したルールから競合セットが生成され、アジェンダはそれらのルールを順番に実行するための戦略を適用します。

何年にもわたって、照合段階または発火段階のいずれかで、rete の一部を並列化するために多くの努力がなされてきました。

すべてのルールを並行して実行する場合の大きな問題は、決定論的な実行です。

現在、Drools での同時および並列マッチングのさまざまな戦略を検討しています。ルールの同時発火についても検討しますが、並行して発火できるものとそうでないものをユーザーが示すためのより確実な方法を見つける必要があります。ユーザーが必要な場所で決定論的な実行を行えるようにします。

于 2012-05-14T11:29:17.693 に答える