类 faiss::ThreadedIndex

template<typename IndexT>
class ThreadedIndex : public IndexT

一个线程集合中索引的持有者。 此类的接口本身不是线程安全的

faiss::IndexReplicasTemplate< IndexT >, faiss::IndexShardsTemplate< IndexT > 继承

公共函数

explicit ThreadedIndex(bool threaded)
explicit ThreadedIndex(int d, bool threaded)
~ThreadedIndex() override
virtual void addIndex(IndexT *index)

重写由我们自己管理的索引。 警告:一旦添加了索引,从任何其他线程(而不是管理它的线程)访问它将是不安全的,直到我们关闭它为止。 使用 runOnIndex 在其上执行工作。

void removeIndex(IndexT *index)

删除由我们自己管理的索引。 这将刷新该索引上的所有待处理工作,然后关闭其管理线程,并删除该索引。

void runOnIndex(std::function<void(int, IndexT*)> f)

在索引管理所在的线程中,在所有索引上运行一个函数。 函数参数为(集合中的索引,索引指针)

void runOnIndex(std::function<void(int, const IndexT*)> f) const
void reset() override

faiss::Index API。 所有索引都接收相同的调用

inline int count() const

返回子索引的数量。

inline IndexT *at(size_t i)

返回第 i 个子索引。

inline const IndexT *at(size_t i) const

返回第 i 个子索引 (const 版本)

公共成员

bool own_indices = false

我们是否负责删除包含的索引。

保护函数

virtual void onAfterAddIndex(IndexT *index)

在添加索引之后立即调用。

virtual void onAfterRemoveIndex(IndexT *index)

在删除索引之后立即调用。

保护属性

std::vector<std::pair<IndexT*, std::unique_ptr<WorkerThread>>> indices_

Index 实例的集合,以及它们管理的 worker 线程(如果有)。

bool isThreaded_

此索引是否为多线程?

保护静态函数

static void waitAndHandleFutures(std::vector<std::future<bool>> &v)