Я попытаюсь ответить, но я так вижу. IMO, вы должны вернуть несколько слов назад:
... наблюдаемые результаты запускаемое зависимостью выполнение.
Способ, которым я видите, выполнение, инициированное зависимостью, - это то, как инструкции в вашем коде имеют «зависимости» между собой. Например:
int xx = ...;
int yy = ...;
int getSum(){
int x = xx;
int y = yy;
return x + y;
}
Не имеет значения, делает ли оптимизатор:
int y = yy;
int x = xx;
return y + x;
то есть: он переупорядочивает инструкции или даже может выполнять их параллельно:
Несмотря на то, что вычисления могут быть параллельными по умолчанию на уровне инструкций ...
всегда должно быть так:
... в локальном В этом режиме наблюдаемые результаты выполнения, запускаемого зависимостями, всегда эквивалентны результатам чисто пошагового последовательного выполнения.
Все, что вы наблюдаете, исходящее из getSum
всегда будет быть x + y
, независимо от того, как это было оптимизировано (например, форма SSA) или даже если все тело метода выполнялось параллельно на уровне процессора, например.
Лучший пример, который включает некоторые запускаемые зависимостями выполнения можно найти здесь ; где я пытался показать, что даже если какой-то код имеет зависимости друг от друга, оптимизатор может переупорядочить инструкции, если это действительно согласно JMM