0
我想並行修改或克隆/變換預先排序的樹項目列表中的項目。這是列表遍歷從列表中的隨機項開始,並表示子樹遍歷(深度,父指針,後代大小和angleStart/angleEnd可用於徑向視圖)。並行化預訂樹
我的代碼目前的樣子:
items = ((AbsModel<SunburstContainer, SunburstItem>)model).listIterator(pHitItemIndex);
items.next();
for (int i = pHitItemIndex + 1; i < endIndex && items.hasNext(); i++) {
final SunburstItem oldChild = items.next();
final SunburstItem newChild = new SunburstItem(oldChild);
final float newStartAngle =
(oldChild.getAngleStart() - oldRoot.getAngleStart()) * angleFactor;
LOGWRAPPER.debug("angleStart: " + newStartAngle);
newChild.setAngleStart(newStartAngle);
float newEndAngle =
(oldChild.getAngleEnd() - oldChild.getAngleStart()) * angleFactor
+ newChild.getAngleStart();
LOGWRAPPER.debug("angleEnd: " + newEndAngle);
if (newEndAngle > PConstants.TWO_PI) {
newEndAngle = PConstants.TWO_PI;
}
newChild.setAngleEnd(newEndAngle);
newChild.setAngleCenter(newChild.getAngleStart()
+ ((newChild.getAngleEnd() - newChild.getAngleStart())/2f));
newChild.setIndexToParent(oldChild.getIndexToParent() - pHitItemIndex);
int newDepth = 0;
LOGWRAPPER.debug("child depth: " + oldChild.getDepth());
LOGWRAPPER
.debug("parent depth: " + model.getItem(oldChild.getIndexToParent()).getDepth());
final int parentDepth = model.getItem(oldChild.getIndexToParent()).getDepth();
if ((parentDepth + 1) != oldChild.getDepth()) {
newDepth = oldDepthMax + 2;
} else {
newDepth = newItems.get(newChild.getIndexToParent()).getDepth() + 1;
}
if (newDepth > depthMax) {
depthMax = newDepth;
}
LOGWRAPPER.debug("newDepth: " + newDepth);
newChild.setDepth(newDepth);
newChild.update(mMappingMode, mBuffer);
newItems.add(newChild);
}
我想簡單地劃分(子)名單,即[pHitItemIndex + 1,endIndex的]成不同的部分,並提交給可調用的ExecutorService的。目前整個算法是在提交給ExecutorService的Callable中執行的,但我認爲我也可以簡單地將分區/ Callables提交給同一個ExecutorService。我想知道是否會獲得使用演員的優勢,例如使用Akka或使用ForkJoin框架。
謝謝,但第二個想到它似乎不是真正的可並行化,因爲我需要轉換的父項進行深度計算: - / – Johannes 2012-02-06 15:04:22