Dim*_*tri 6 c# parallel-processing multithreading c#-4.0
场景:接收数据并将其写入带有时间戳的数据库.我需要按照基于时间戳接收的顺序处理原始数据,并将其写回数据库,不同的表,再次根据时间戳维护订单.
我提出了以下设计:创建了两个队列,一个用于存储来自数据库的原始数据,另一个用于存储已处理的数据,然后再写回数据库.我有两个线程,一个读取初始队列,另一个读取Result队列.在我之间生成多个线程来处理来自Initial队列的数据并将其写入Result队列.
我已经尝试过SortedList(手动锁定)和BlockingCollection.我使用了两种并行处理方法:Parallel.For(ForEach)和TaskFactory.Task.StartNew.
基于若干因素,每个数据单元可能花费可变的时间来处理.一个线程仍然可以处理第一个数据点,而其他线程每个处理三个或四个数据点,搞乱了时间戳顺序.
我最近发现了OrderingPartitioner,我认为它可以解决问题,但是按照MSDN的例子我可以看到,它也没有对基础集合进行排序.可能是我需要实现自定义分区器来订购我的复杂数据类型集合?或者可能有更好的方法来解决问题?
任何有关讨论类似问题的文章的建议和/或链接都受到高度赞赏.
就个人而言,我至少会尝试开始使用BlockingCollection<T>
输入和ConcurrentQueue<T>
结果的实例.
我会使用Parallel Linq来处理结果.为了在处理过程中保留顺序,可以在PLINQ语句中使用AsOrdered().
归档时间: |
|
查看次数: |
1469 次 |
最近记录: |