如何使用多线程方案在数据库中高效搜索?



我有一个基于RAM的数据库,其形式是树链表(列表中的每个节点都指向一个字符串树)。

给出一组单词作为输入,必须在 RAM 数据库中搜索该组中的每个单词。

我想实现一个多线程搜索功能。当前实现使用 2 级线程方案。第一级线程类将同时从输入集中取出单词,然后此级别的每个线程将生成其他工作线程,这些线程将在 RAM DB 中搜索相同的单词。

该实现可以工作,但受到同步开销的影响很大(除了创建、终止线程的开销以及它们之间的负载不平衡),因此我想改进方案以获得更好的性能。

当前实现详细信息:第一级线程创建(生成)工作线程以搜索相同的单词。每当其中一个工作线程在数据库中找到该单词时,它都必须终止其他线程,然后将结果返回到父线程(第一级线程)。父线程将抓取另一个单词并重复该过程,直到没有要搜索的单词。输入集受锁保护,每组工作线程(搜索相同单词的线程)在 RAM DB 中都有一个受保护的共享指针。

问题是:对于这种情况,您还能建议哪些更有效的方案?

大概最快的是让工作线程已经"运行",但在条件变量(或屏障)上被阻塞。 (如果您先验地知道如何对树进行负载平衡,则线程知道要搜索哪些树;否则,您需要某种工作队列。 学习要搜索的(下一个)单词的线程将其存储在共享位置并发出变量信号(或加入障碍)。 当一个线程找到该单词时,它会设置一个标志,将其他线程(不幸的是必须编写这些线程以定期检查它)发送回等待状态。

最新更新