| OCR Text |
Show 85 This case has the same effect as the previous one. Tasl< C is practically nonexistent and will be garbage collected later. C' is the only tasl< which may produce an answer. Case 3: an old result completes before the parent fails (Figure 26). Task C may have already finished the computation and returned the answer back to parent P before P breaks down. The result of task C is stored inside the parent P. When P falls . the system loses all partial results which have been saved in P. The recovery task P' must recalculate C by activating task C'. This is also equivalent to the case 1 mentioned earlier. As far as the recovery task P' is concerned, child task C' is the only legitimate offspring. Case 4 and 5: an old result comes before the new invocation (Figure 27). Tasl< C finishes computation after the parent P dies. C sends its result to the grandparent task which transfers the result to the step-parent P'. Figure 27 does not show the grandparent node for clarity and the result from C to P' is depicted directly. The difference between cases 4 and 5 is that in case 4, the grandparent has to reproduce P' first. When child task C' is executed by task P', P' will not spawn C' because the answer is already there. There is still only one result C' in the system. Case 6: old result arrives before the new result (Figure 28). Suppose that P' has already spawned C' when the result from C arrives at P'. Theoretically, the result from C and the would-be answer from C' are identical. Therefore, parent P' takes the answer from C and proceeds with the execution. The addition of C' may produce a duplicate answer to P'. Since they are identical, the second copy is ignored. Case 7: old result arrives after the new result. This is the reciprocal situation of case 6. Note that due to the asynchrony nature of task evaluations, late invocation of an identical task may yield faster result than the earlier invocation. |