我目前正在开发一个依赖于许多不同Web服务来获取数据的应用程序。由于我想模块化每个服务并且在那里有一点依赖(service1必须在服务2和3之前运行等),我在自己的任务中运行每个服务。
任务本身是
主动运行,意味着他们将请求发送到Web服务并等待响应或处理响应
等待(通过监视器和超时) - 一旦任务完成所有等待任务的唤醒并检查其依赖关系是否已完成
现在,系统正在运行我所谓的良好性能(特别是因为性能可以忽略不计) - 但是,应用程序会生成很多任务。
所以,我的问题是:这个场景中的约200个任务太多了?它们会产生那么多开销,以便基本上非线程的方法会更好吗?
答案 0 :(得分:11)
一般答案是“测量,测量,测量”:)如果您没有遇到任何性能问题,则不应该开始优化。
我会说200个任务很好。与线程相比,任务的优点是与“真实”线程甚至线程池相比,其开销较低。 TaskScheduler确保尽可能使用所有硬件线程,并且线程切换次数最少。它通过各种技巧来实现这一点,因为串行运行子任务,从其他线程上的队列中窃取工作等等。
您还可以通过TaskCreationOptions
向TaskScheduler提供有关特定任务将要执行的操作的一些提示如果你想要一些数字,请查看这篇文章,正如你所看到的,Tpl在开销方面非常便宜 http://www.palmmedia.de/Blog/2010/1/19/net-40-performance-of-task-parallel-library-tpl
这是关于这个主题的另一篇有趣的文章 http://msdn.microsoft.com/en-us/magazine/cc163552.aspx