1. A method comprising: a compiler, running on a server, dividing a knowledgebase into a plurality of virtual partitions, the knowledgebase comprising a network constructed according to a plurality of rules, said dividing comprising: for each rule of the plurality of rules: creating a virtual partition corresponding to the rule and identifying nodes for the rule, and for each node identified: determining if a node in the network associated with the rule in the knowledgebase already exists for another rule in the knowledgebase; adding the node to the virtual partition associated with the rule if the node does not exist for another rule in the knowledgebase; and allowing the virtual partition associated with the rule to share the node with a second virtual partition associated with a second rule if the node already exists for the second rule in the knowledgebase; and a rule engine, running on the server, executing the plurality of virtual partitions in parallel by threads from a plurality of threads; the rule engine using a first thread of the plurality of threads to propagate a fact through a first plurality of nodes in a first virtual partition; and upon the fact reaching an asynchronous connection between the first virtual partition and a second virtual partition, the rule engine using a second thread of the plurality of threads to propagate the fact through a second plurality of nodes in the second virtual partition, wherein at least one of the first plurality of nodes or the second plurality of nodes comprises a pair of nodes associated with different rules.