我希望能得到有关线程管理和任务并行库的建议,因为我不确定自己一直在正确的路上。简单来说,我的目标是使用基于启发式算法生成一个“解决方案”,以下是我的大致思路:
首先需要计算出一个基本解决方案,这个操作可能无法并行化,所以我们不需要担心。
一旦初始解决方案被生成,我想要触发n个线程,尝试找到更好的解决方案。这些线程需要完成以下几个任务:
1.它们需要使用不同的“优化指标”进行初始化。换句话说,它们试图通过代码中设置的优先级来优化不同的事物。这意味着它们都运行着稍微不同的计算引擎。我不确定是否可以使用TPL实现这一点。
2.如果其中一个线程找到了比当前已知最佳解决方案更好的解决方案(需要在所有线程之间共享),则需要更新最佳解决方案,并强制重新启动一些其他线程(这取决于优化指标的优先级)。
3.我可能还希望将某些计算组合在不同的线程中(例如保持某种方法解决问题的概率的联合)。但这可能更多是可选项。
4.整个系统显然需要是线程安全的,并且我希望它能尽可能地快速运行。
我曾经尝试过一个涉及管理自己的线程并关闭它们等操作的实现,但它开始变得非常复杂,现在我想知道TPL是否更好。请问有人可以提供一些通用指导吗?
谢谢...
首先需要计算出一个基本解决方案,这个操作可能无法并行化,所以我们不需要担心。
一旦初始解决方案被生成,我想要触发n个线程,尝试找到更好的解决方案。这些线程需要完成以下几个任务:
1.它们需要使用不同的“优化指标”进行初始化。换句话说,它们试图通过代码中设置的优先级来优化不同的事物。这意味着它们都运行着稍微不同的计算引擎。我不确定是否可以使用TPL实现这一点。
2.如果其中一个线程找到了比当前已知最佳解决方案更好的解决方案(需要在所有线程之间共享),则需要更新最佳解决方案,并强制重新启动一些其他线程(这取决于优化指标的优先级)。
3.我可能还希望将某些计算组合在不同的线程中(例如保持某种方法解决问题的概率的联合)。但这可能更多是可选项。
4.整个系统显然需要是线程安全的,并且我希望它能尽可能地快速运行。
我曾经尝试过一个涉及管理自己的线程并关闭它们等操作的实现,但它开始变得非常复杂,现在我想知道TPL是否更好。请问有人可以提供一些通用指导吗?
谢谢...