我正在处理一棵树,并希望使用 GPAR 加速它。我将它用于简单的事情,但没有深入研究更复杂的选项。
假设我正在用自己的线程处理树的不同分支。
假设一个节点有一个名字。当我第一次点击该节点时,我希望它被处理(包括将内容写入数据库等),并添加到缓存中(这里只是一个简单的地图)。
我希望其他线程可能会在树上的其他地方碰到同一个节点(例如同名的节点),以检查缓存。如果它已经在缓存中,他们可以抓住它并继续前进。如果另一个线程第一次处理该节点,我希望其分支中该节点上的其他线程在继续向下树之前等待(对于依赖于该节点的其他事物已经被处理)。
该节点是从数据库中提取的,因此每个分支中的对象都不相同,我认为同步方法不会起作用。
我当然希望其他不相关的节点继续处理。
例如:
- 线程 1 正在处理 ABCD
- 线程 2 正在处理 EBFG
- 线程 3 正在处理 WXY
- 线程 4 正在处理 LMNOPQRSBJ
假设线程 1 首先到达节点 B。它发现它不在缓存中,所以它开始处理它。
线程 2 出现并看到节点 B 不在缓存中,但它正在处理中。所以它等待继续到节点 F,直到线程 1 完成处理节点 B。
线程 3 不关心节点 B,因此继续运行。
线程 4 在线程 1 处理完节点 B 并在缓存中找到节点 B 之后出现,因此它只是将其从缓存中拉出并继续到节点 J。
我正在寻找有关如何最好地将 GPAR 应用于这种情况的建议。
谢谢!