多少任务太多了

本文关键字:太多 任务 多少 | 更新日期: 2023-09-27 18:35:21

我目前正在开发一个依赖于许多不同的Web服务来获取数据的应用程序。由于我想模块化每个服务并且其中有一些依赖关系(service1 必须在服务 2 和 3 等之前运行),所以我在自己的任务中运行每个服务。

任务本身是

  1. 主动运行,这意味着它们正在向 Web 服务发送请求并等待响应或处理响应

  2. 等待(通过监视器和超时) - 任务完成后,所有等待任务都会唤醒并检查其依赖项是否已完成

现在,系统以我所谓的良好性能运行(特别是因为性能可以忽略不计) - 但是,应用程序生成了相当多的任务。

所以,对于我的问题:在这种情况下~200个任务太多了吗?它们是否会产生那么多开销,以便基本上非线程的方法会更好?

多少任务太多了

一般答案是"测量,测量,测量":)如果您没有遇到任何问题,则不应开始优化。

我会说200个任务很好。与线程相比,任务的美妙之处在于与"真正的"线程甚至线程池相比,它们的开销较低。任务计划程序确保以最少的线程切换量尽可能多地利用所有硬件线程。它通过各种技巧来实现这一点,例如串行运行子任务、从其他线程上的队列中窃取工作等。

您还可以通过 TaskCreationOptions 向 TaskScheduler 提供一些有关特定任务将要执行的操作的提示

。<小时 />

如果你想要一些数字,请查看这篇文章,如您所见,Tpl在开销方面非常便宜:
.NET 4.0 - Task Parallel Library (TPL) 的性能,作者:Daniel Palme

这是关于该主题的另一篇有趣的文章:
CLR Inside Out: Using concurrency for scalability,作者:Joe Duffy