我是多线程的新手,我正在处理我的应用程序中的一个区域。我已经阅读了该网站上的许多帖子,但我仍然对解决问题的最佳方法感到困惑:
[1] 在 .NET 3.5 中,ThreadPool
程序利用机器中的多核是唯一的方法吗?即是否可以使用在不同的核心上产生线程new Thread()
?
[2] 我的案例:我有List<Calculation>
大约 80 个项目,目前按顺序处理。因此,鉴于我正在使用 .NET 3.5 并且根据我所读到的内容,ThreadPool
由于线程数量众多,这可能是我对多线程的最佳选择,但是:
- 计算之间有很多依赖关系。目前,列表的排序方式是在开始时执行所有必需的计算。
这就是工作项的依赖关系的样子(细节并不重要,只是想说明依赖关系的复杂性):
- 计算时间差别很大,一个 Calculation 对象可能只涉及检索值,其他 Calculation 对象将涉及嵌套循环中的大量工作......等等
我如何Calculations
根据它确定具有 10 多个其他工作项的主要内容的优先级?什么是最有效的信号使用方式?
谢谢你。
编辑:我应该提到它List<Calculation>
仍然是固定的。但是,计算 80+ 次计算称为 x 百万次。每次更新迭代器时,都会Calculation
在列表中的每一个上调用Calculate()。