我一直在阅读Effective Java
项目46:首选 - 每个循环到传统的for循环
在提到的部分中,当需要迭代器/ for循环而不是for-each循环的情况时,有这一点:
并行迭代 - 如果需要遍历多个集合 并行,那么你需要显式控制迭代器或索引 变量,以便可以前进所有迭代器或索引变量 在锁步。
现在,我理解对迭代器/索引变量的显式控制意味着什么(不是每个循环的控制器)。但在这个意义上我无法理解锁步的意义。我试图谷歌它,并在Wikipedia上找到一篇文章说明:
Lockstep系统是运行相同的容错计算机系统 同时并行设置一组操作。
我理解为具有用于故障转移的服务器的附加实例,这没关系。但我无法完全理解在编程中迭代集合的上下文中可能存在的确切含义。
答案 0 :(得分:6)
在这种情况下,含义更像military marching。
或者,当一个操作前进时,其他操作前进/后续操作。
或者更具体地说,如果你想迭代两个集合,你就不能轻易地构建foreach:
for (Item i : list1) { //only allows you to iterate over 1 list.
}
迭代2个集合)
Iterator iter1 = list1.iterator();
Iterator iter2 = list2.iterator();
while (iter1.hasNext() && iter2.hasNext()){
Item a = iter1.next();
Item b = iter2.next();
doSomething(a, b);
}
即。迭代list1时,迭代list2跟随它 - “in lockstep”
答案 1 :(得分:5)
锁步执行意味着将“同时”在所有处理器上同时执行相同的语句。在处理GPGPU(通用图形处理单元)编程时,这一点非常重要。 GPU实际上在不同的数据集上并行执行完全相同的操作。
示例:在对数据进行独立操作的for循环中(例如向量加法问题),所有处理器可以同时调用add操作,然后以锁步方式在两个单独的向量索引上同时进行赋值操作,作为一个附加并且任务独立于另一个。
答案 2 :(得分:3)
在这种情况下,“锁步”的含义并不特殊,而是英语含义,被解释为“同时”。
答案 3 :(得分:0)
这里,它只是意味着索引和迭代器同时被提前,因此它们总是对应于同一个元素。有点像两个人并排走路 - 如果他们要保持并肩,他们必须一起前进。