背景:两个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就可以了多线程数据比对大数据分页Linq
{
if(list1[i]==list2[i])
{
//记录i值
}
}弊端:
显然,这样进行操作单个循环很没有效率,数据量小的时候小可以凑合,由于数据量日益变大,等待比对结果时间过长显然不合适.我所想的解决: 开10个线程 ,将list1,list2进行"分页" 10个线程分别对应的是第1,2,....10页,10线程得到比对结果,最后汇总结果。不知道上面的思路是否合理,另外以上的思路是否可以称为“并发”处理?如何用代码来解决这个问题?谢谢各位,给一个demo就可以了多线程数据比对大数据分页Linq
CPU硬件上是可以的
List1 分页1,2,3,4,5List2 分页1,2,3,4,5这样可以不?
线程1=>List1 页1 与List2 页1 进行比对线程2=>List1 页2 与List2 页2 进行比对
......
线程5=>List1 页5 与List2 页5 进行比对
不可以,list1页2的数据可能在list2页1中,这样就丢了cpu的数量如果少,少于线程数,线程就不能完全达到并行计算
看它的原先做法,它这个的需求可以这样比吧,list1页2的数据不可能在list2页1中的,因为比较的是相同位置上的数据
Sorry,假定的条件缺少,影响你了:
补充假定条件=>
list1 和 List2 都已经是经过排序了的 ,现在所需的是在相应的序号上对两边的List进行比对,所以可以忽略页中的数据重复问题。
Thread tn1 = new Thread(() => 比对方法(list1页1,list2页1));
Thread tn2 = new Thread(() => 比对方法(list1页2,list2页2));
...
Thread tn10 = new Thread(() => 比对方法(list1页10,list2页10));tn1.start();
tn2.start();
....
tn10.start();又或者循环处理?
int[] result = Enumerable.Range(0, list1.Count).AsParallel().Where(x => list1[x] != list2[x]).ToArray();
Sorry,假定的条件缺少,影响你了:
补充假定条件=>
list1 和 List2 都已经是经过排序了的 ,现在所需的是在相应的序号上对两边的List进行比对,所以可以忽略页中的数据重复问题。个人认为此法不妥,假如出现以下状况:
List1: {12,13,14,15,16,17,18,19,...}
List2: {12,13,15,16,17,18,19,20,...}
这样从i=2起两个List中同一位置的数值就不相等了。
Sorry,假定的条件缺少,影响你了:
补充假定条件=>
list1 和 List2 都已经是经过排序了的 ,现在所需的是在相应的序号上对两边的List进行比对,所以可以忽略页中的数据重复问题。刚刚少写了一句:
假如List1和List2出现以下状况:
List1: {12,13,14,15,16,17,18,19}
List2: {12,13,15,16,17,18,19,20}
这样从i=2起两个List中同一位置的数值就不相等了。两个List中重复项共有7项,虽然15,16,17,18,19在两个List中都出现了,但i[2]至i[7]都是不相等的,程序会不会只把i[0]和i[1]重复项?
nice 赞一个,这是一种解决问题的好思路,比这我边抓头发想怎么解决多线程的问题方便的多。
Sorry,假定的条件缺少,影响你了:
补充假定条件=>
list1 和 List2 都已经是经过排序了的 ,现在所需的是在相应的序号上对两边的List进行比对,所以可以忽略页中的数据重复问题。个人认为此法不妥,假如出现以下状况:
List1: {12,13,14,15,16,17,18,19,...}
List2: {12,13,15,16,17,18,19,20,...}
这样从i=2起两个List中同一位置的数值就不相等了。考虑很精细呀,不过这里只需要比较同一“位置”的数据是否相同,所以这些精细的考虑过虑了