Ch06-AmDB 之 Executor
December 6, 2022
AmDB 之 Executor
1. 接口定义 #
class IExecutor {
public:
  virtual Status Open();
  virtual Status Close();
  virtual State Prepare() = 0;
  virtual Status Work() = 0;
  InputPort& CreateInputPort();
  OutputPort& CreateOutputPort();
protected:
 std::vector<InputPort> inputs_;
 std::vector<OutputPort> outputs_;
}
2. 实现原理 #
executor 对数据的处理都是以 chunk 为单位进行处理的。

- 依次遍历所有的 executor,使用 Connect 将 Port 连接到一起;
 - 依次遍历所有的 executor,调用每个 executor 的 Open() 将 executor 打开(根据 executor 特性决定,大部分什么操作都不做);
 - 依次遍历所有的 executor,调用每个 executor 的 Prepare() 将 executor 初始化(比如将 chunk 推到 Cache 中)
 - 依次遍历所有的 executor,调用每个 executor 的 Work() 执行 executor(比如插入数据/读取数据等)
 - 依次遍历所有的 executor,调用每个 executor 的 Close() 将 executor 关闭(大部分什么操作都不做)
 
当然上述的步骤只是为了方便说明而这么写的,实际上每个 executor 会被多次封装成 task 放入到队列中,由 scheduler 调度执行。