Chris, The decision between A and B must be taken on the basis of: do you need to join objects from the different streams together? If so, you need A. If not, better go with B.
Regarding threads, the engine works with a single thread, unless you activate the KnowledgeBase partitioning option (check the Drools Fusion documentation), in which case the engine spawns a pool of worker threads. The threads are not assigned to specific streams. They are used as a pool for processing of all required rules in the knowledge base. In any case, as long as you don't have multiple threads concurrently inserting facts/events into a single entry-point, everything else is thread safe. []s Edson 2009/6/24 Chris Richmond <[email protected]> > Hello, > > > > > > For performance reasons, assuming I am using STREAM mode, is it better to : > > > > A. create several streams in my rule file and inject objects into > various streams depending on my needs > > > > or > > > > B. create a different session for each stream that I might have had in > A. above? > > > > > > And if I do use option A, is my understanding correct that each stream will > be processed on it’s own thread? > > > > And if so, I notice that I am able to update a common statistical object > that I created within my rule file and update it from consequences on > different streams. If each stream is processed on it’s own thread, is > updating of this in rule defined statistics object synchronized/thread safe? > > > > For example in my rule file I have the following “stats” object: > > > > # stats object > > declare ObjectStats > > id : String @key > > name: String > > lastReadingA : int > > lastReadingB : int > > > > end > > > > > > ….then I have the following two rules…… > > > > rule "update stats from objects A” > > lock-on-active > > when > > > > $stats : ObjectStats( $id : id) > > $a : ObjectTypeA(parentId == $id, $aValue : value) from entry-point > “stream for objects of type a” > > > > then > > > > modify($stats) { lastReadingA = $aValue }; > > > > > > end > > > > > > rule "update stats from objects B” > > lock-on-active > > when > > > > $stats : ObjectStats( $id : id) > > $b : ObjectTypeB(parentId == $id, $bValue : value) from entry-point > “stream for objects of type b” > > > > then > > > > modify($stats) { lastReadingB= $bValue }; > > > > end > > > > > > This is working fine and the lock-on-active seems to be preventing me from > getting the “cross product” problem, but is each of these streams processed > independantly on their own thread? > > > > Thanks, > > > > Chris > > _______________________________________________ > rules-users mailing list > [email protected] > https://lists.jboss.org/mailman/listinfo/rules-users > > -- Edson Tirelli JBoss Drools Core Development JBoss by Red Hat @ www.jboss.com
_______________________________________________ rules-users mailing list [email protected] https://lists.jboss.org/mailman/listinfo/rules-users
