Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java lockstep在编程中意味着什么?_Java_Collections - Fatal编程技术网

Java lockstep在编程中意味着什么?

Java lockstep在编程中意味着什么?,java,collections,Java,Collections,我一直在网上阅读effectivejava 第46项:与传统for循环相比,更喜欢for each循环 在提到迭代器/for循环需要为每个循环指定的情况的部分中,有以下几点: 如果需要遍历中的多个集合,请执行并行迭代 并行,则需要对迭代器或索引进行显式控制 变量,以便可以对所有迭代器或索引变量进行升级 步调一致 现在,我明白了迭代器/索引变量的显式控制意味着什么(而不是每个循环的控制器)。但我无法理解锁步在这个意义上的含义。我尝试在谷歌上搜索,发现一篇文章写道: Lockstep系统是运行同一系

我一直在网上阅读
effectivejava

第46项:与传统for循环相比,更喜欢for each循环

在提到迭代器/for循环需要为每个循环指定的情况的部分中,有以下几点:

如果需要遍历中的多个集合,请执行并行迭代 并行,则需要对迭代器或索引进行显式控制 变量,以便可以对所有迭代器或索引变量进行升级 步调一致

现在,我明白了迭代器/索引变量的显式控制意味着什么(而不是每个循环的控制器)。但我无法理解锁步在这个意义上的含义。我尝试在谷歌上搜索,发现一篇文章写道:

Lockstep系统是运行同一系统的容错计算机系统 同时并行执行的一组操作


这我理解为有一个传统的实例,例如服务器,用于故障转移,这没关系。但我无法完全理解在编程中迭代集合的上下文中的确切含义

在本上下文中,“lockstep”的含义并不特殊,而是英语的含义,被解释为“同时”。在本上下文中,该含义更像

或者,当一个操作进行时,其他操作也随之进行

或者更具体地说,如果要在两个集合上迭代,则不能轻松使用foreach构造:

for (Item i : list1) { //only allows you to iterate over 1 list.

}
迭代2个集合)


i、 e.迭代列表1时,迭代列表2紧随其后-“在锁步中”

这里,这只是意味着索引和迭代器同时前进,因此它们总是对应于同一个元素。有点像两个人并排走——如果他们要并排走,就必须一起向前走。

锁步执行意味着相同的语句将在所有处理器上同时“并行”执行。这在处理GPGPU(通用图形处理单元)编程时特别重要。GPU实际上在不同的数据集上并行执行完全相同的操作


示例:在对数据进行独立操作的for循环中(例如向量加法问题),所有处理器可能会同时调用加法操作,然后以锁步方式对两个单独的向量索引同时调用赋值操作,因为一个加法和赋值是独立于另一个的。

这个答案似乎不正确,因为代码中没有并行执行。该代码完全是串行的
iter1.next()
iter2.next()
不会同时发生!Lockstep意味着它们必须同时发生在不同的处理器上。@Sourabh应用于编程,Lockstep并不一定意味着并行执行-尽管以Lockstep方式运行的同步线程相互关联是Lockstep一词描述的另一种常见模式,这并不是唯一使用这种模式的模式。我不认为lockstep“应用于编程”有什么不同。锁步执行基本上与处理器有关。这意味着所有处理器同时获取指令和操作数,并“同时”执行同一条指令。从优化的角度来看,“相同的时间”字面上是指在相同的时钟周期。此外,如果程序是“串行”的,那么一条语句(
iter.next()
)不可能在另一条语句之前前进,在这种情况下,为什么要将其称为lockstep?
Iterator iter1 = list1.iterator();
Iterator iter2 = list2.iterator();
while (iter1.hasNext() && iter2.hasNext()){
    Item a = iter1.next();
    Item b = iter2.next();
    doSomething(a, b);
}