Ste*_*eve 1 c# task-parallel-library async-await tpl-dataflow
我正在编写一个Windows服务,它将处理大量输入文件.
我的问题是我是否应该使用async
和await
,或者我是否应该使用可以创建自定义库来Task
限制并发线程的数量.
我知道一个事实,如果我排队200个线程,完成所有事情需要更长的时间,而不是一次运行10个(各种资源争夺,CPU中的上下文切换等)
所以我的问题是这些新一届特征是否async
和await
任何更多的运行时的弹性,或者我应该只写我自己的定制库?
如果您正在进行基于I/O的操作,async
并且await
非常棒.在Win32服务中,您没有SynchronizationContext
,因此所有延续都以线程池上的任务结束,这样可以很好地实现负载平衡.(记住,Task
!= Thread
;数百甚至数千个Task
s就好了).
如果您正在进行基于CPU的操作,那么我建议使用任务并行库.特别是Parallel
类型.PLINQ有时更容易使用,但它会假设它可以默认使用所有内核; 因为你正在做一个Win32服务,你想要有点"更好"(使用Linux术语).
TPL Dataflow是一个很棒的库,可以提升async
/ await
进入下一个级别.听起来您的解决方案可能使用基于TPL数据流的方法.你也可以async
很好地在TPL和TPL Dataflow 之间"混合搭配" .
归档时间: |
|
查看次数: |
311 次 |
最近记录: |