多线程数据比对
背景:两个List<int>,假定数据量list1,list2分别为10W,比较两个List[i]中数值不相等的部分,记录下来
原先做法:
for(int i=0;i<list1.Count();i++)
{
if(list1[i]==list2[i])
{
//记录i值
}
}
弊端:
显然,这样进行操作单个循环很没有效率,数据量小的时候小可以凑合,由于数据量日益变大,等待比对结果时间过长显然不合适.
我所想的解决: 开10个线程 ,将list1,list2进行"分页" 10个线程分别对应的是第1,2,....10页,10线程得到比对结果,最后汇总结果。
不知道上面的思路是否合理,另外以上的思路是否可以称为“并发”处理?如何用代码来解决这个问题?谢谢各位,给一个demo就可以了
------解决方案--------------------不合理,可能第二个线程中的数字存在于第一个线程中的数据中,你这样比较就会丢很多符合条件的记录
------解决方案--------------------我觉得你自己的方法就可以,没啥问题
------解决方案--------------------
可以考虑
------解决方案--------------------
int[] result = Enumerable.Range(0, list1.Count).AsParallel().Where(x => list1[x] != list2[x]).ToArray();
------解决方案--------------------
个人认为此法不妥,假如出现以下状况:
List1: {12,13,14,15,16,17,18,19,...}
List2: {12,13,15,16,17,18,19,20,...}
这样从i=2起两个List中同一位置的数值就不相等了。
------解决方案--------------------
int[] result = Enumerable.Range(0, list1.Count).AsParallel().Where(x => list1[x] != list2[x]).ToArray();
4.0的并行的确牛逼,学习了