我希望就线程管理的使用以及任务并行库的使用获得一些建议,因为我不确定我是否走在正确的道路上。最好的可能是我概述了我正在尝试做的事情。
给定一个问题,我需要使用基于启发式的算法生成解决方案。我从计算一个基本解决方案开始,我认为这个操作不能并行化,所以我们不需要担心。
生成初始解决方案后,我想触发n 个线程,试图找到更好的解决方案。这些线程需要做几件事:
- 它们需要使用不同的“优化指标”进行初始化。换句话说,他们试图优化不同的东西,在代码中设置优先级。这意味着它们都运行略有不同的计算引擎。我不确定我是否可以用 TPL 做到这一点。
- 如果其中一个线程找到了比当前最知名的解决方案更好的解决方案(需要在所有线程之间共享),那么它需要更新最佳解决方案,并强制许多其他线程重新启动(这同样取决于优先级的优化指标)。
- 我可能还希望跨线程组合某些计算(例如,为某种解决问题的方法保留概率的联合)。不过,这可能更可选。
- 整个系统显然需要是线程安全的,我希望它尽可能快地运行。
我尝试了一个涉及管理我自己的线程并关闭它们等的实现,但它开始变得相当复杂,我现在想知道 TPL 是否会更好。我想知道是否有人可以提供任何一般性指导?
谢谢...