如何为`CpuPool`工作线程保存状态?

时间:2017-09-13 14:24:31

标签: multithreading rust

我正在创建一个futures_cpupool::CpuPool,其中每个线程都需要打开数据库连接,这是一个代价高昂的初始化。这些初始化的状态需要在作业之间持续存在,因为它们需要很长时间才能完成。数据库连接是工作线程完成其工作所必需的。

1 个答案:

答案 0 :(得分:0)

免责声明:可能有一个更好的解决方案,利用一些CpuPool API,也许......

一个简单的解决方案是使用与ConnectionPool共享的单独Arc

然后,只要您启动一个帖子并要求他们从那里获取连接,您只需将ConnectionPool的引用移交给它。

游泳池本身将负责:

  • 准备新连接(执行初始化工作),
  • 回收使用过的连接,以便更快地满足进一步的需求。

如果更改连接参数(例如,指定不同的区域设置),这里有一点点困难。我建议给每个客户一个新鲜的"连接,所有设置都标准化为已知值。

还有一个设计选择,用于何时(以及在哪个线程上)执行初始化和回收工作;我建议你从最简单的解决方案开始:

  • 按需初始化,
  • 移交时立即回收。