Будучи методом fork();
в пределах compute()
, как получилось, что это не называется другой степенью параллелизма при каждом методе compute()
? Возможно, есть логический флаг? EDIT:О каркасе fork-join
переопределение метода compute()
классовой RecursiveTask: (псевдокод)
if {array.length<100)
do it
else
divide array by 2;
fork();
int righta = rightArray.compute();
int lefta =(Integer)leftArray.join();
return righta +lefta;
Так в основном это является compute()
метод, который вызывается рекурсивно и когда fork()
происходит это делает возможным использование параллелизм и процесс этой задачи с другим ядром. Однако быть рекурсивным fork()
следует вызывать все время, когда метод получает рекурсивно. Так что в реальности этого не бывает (не было бы смысла). Это связано с булевым флагом, который говорит, что fork уже активирован?
Заранее спасибо.
Неясная ... Вы можете написать какой-нибудь псевдо-код, показывающий путь кода вам не понимаете и что вы в этом не понимаете? – fge
ok редактирование ответа – Rollerball
'fork()' вызывается только в том случае, если 'array.length> = 100'. Какая еще логика вам нужна? –