好的,一堆信息:
场景
计算的性质
A中,我只需要完成一项任务。在执行任务时,它会创建一组其他任务。因此,最终我将有数以百万计的任务。可视化:

只需异步运行所有操作的简单方法就会杀死机器--创建数百万任务的开销是巨大的。
问题
我该如何处理这个问题?Parallel?PLINQ?Rx?数据流?还有别的吗?直接的线程池?
发布于 2016-03-22 14:15:54
一百万项TPL任务并不直接是一个问题。这将消耗几百MB的内存。可能,您有其他数据附加到那些导致高内存消耗的任务。
而且,随着时间的推移,TPL容易产生无限数量的线程。它不知道如何正确地安排IO。线程的数量实际上是无限增加的。
无论您使用什么机制来安排这项工作:总时间的流逝并不重要。调度和运行一百万个无操作任务只需几秒钟.
您可能应该按照自定义计划的顺序处理图形。我的方法是先安排对外部服务的呼叫。这样,这些空白就可以被恰好可用的更快的任务所填补。
TaskScheduler抽象不适合这种情况。它和IO玩得不好。
在架构上,每当任务结束时,我都会做出调度决策。然后,你可以根据政策决定下一步该从什么开始。例如,您可能希望在运行中有与CPU内核相同的CPU绑定操作。您可能希望在任何时候都有N个IO操作未完成。
https://stackoverflow.com/questions/36156542
复制相似问题