好的,一堆信息:
A
中,我只从一个任务开始。在执行任务时,它会创建一系列其他任务。所以最后我会有数百万的任务。可视化:以异步方式运行所有操作的简单方法会导致计算机崩溃 - 创建数百万个任务的开销很大。
我该如何处理这个问题? Parallel
? PLINQ
?接收?数据流?别的什么?线程池直接?
答案 0 :(得分:2)
一百万个TPL任务不是直接问题。这将消耗几百MB的内存。可能还有其他数据附加到那些导致高内存消耗的任务。
此外,TPL很容易随着时间的推移产生无限数量的线程。它不知道如何正确安排IO。线程数无限地上升。
您使用什么机制来安排这项工作:总时间过长并不重要。调度和运行一百万个无操作任务只需几秒钟。
您可能应该按自定义排程顺序处理图表。我的方法是首先安排对外部服务的调用。这样就可以通过恰好可用的更快的任务填补空白。
TaskScheduler
抽象不适合这种情况。它与IO不匹配。
在架构上,我会在任务结束时做出调度决策。然后,您可以根据策略决定接下来要做什么。例如,您可能希望在飞行中拥有与CPU核心一样多的CPU绑定操作。您可能希望随时都有N IO操作。