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