После завершения вызовов gen
и sq
одновременно выполняются 3 программы. Они передают данные между каналами и, следовательно, выполнение дает одинаковые результаты.
- gen-inner
- sq-inner
- main
Они всегда пропускают как минимум 2 фрагмента информации и поэтому запускают свой код в следующем порядке:
- gen-inner
out <- n
-2-> sq-inner out <- n * n
-4->main println(<-out)
- gen-inner
out <- n
-3-> sq-inner out <- n * n
-9-> main println(<-out)
Существует также третий проход, которыйможет случиться, но может быть пропущен, так как main
конец программы.
gen-inner
close()
-close-> sq-inner
close(out)
-close ->