Split vs. Split-Join

I have a question regarding how Split should be interpreted, and how it 
differs from Split-Join. I will illustrate this with the following 
example. We have a composite process, which consists of a Sequence, 
where the first item is a Split-Join, and the second a Perform. If we 
think of these in terms of how a client that wishes to execute an OWL-S 
composite process would act, I guess the client would do the following:

1) Create a new thread for all but the first item in the 
ControlConstructBag of the Split-Join, and associate each thread with 
its ControlConstruct.
2) For each thread, including the first one, invoke the ControlConstruct 
it is associated with.
3) For the main thread, wait for all the other threads to finish, then 
invoke the Perform.

Here, it does not matter which ControlConstruct is chosen for the main 
thread, as all threads have to finish anyway.

But if we substitue a Split for the Split-Join, step 3 becomes:

3) For the main thread, when finished, invoke the Perform.

Here it does matter which thread is chosen as main. This, however, is 
not reflected in the OWL-S description. We could just say that it is 
always the first item in the ControlConstructBag that is the main one, 
but then it should be a ControlConstructList, since bags are not 
supposed to be seen as having any internal ordering.

Another interpretation is:

3) For the the first thread that finishes step 2, invoke the Perform.

Here, we don't have to care which thread is "main", but this 
interpretation seems awkward. AFAIK, this kind of thing is usually not 
done in concurrent programming. For one thing, each thread has to check 
that no other thread has gone on to execute the next step in the sequence.


I also have another question regarding the interpretation of both Splits 
and Split-Joins: If a process has no return value, how does a client 
know when it is finished? If we are executing web services over SOAP, is 
the client correct in just continuing as soon as it has invoked the 
service? Or does a service _have_ to have some return value or some 
other way of letting the caller know it has finished? I'm pretty sure 
there's no clear-cut answer to this question, so I'm mostly hoping to 
provoke some discussion.

Regards,
/Daniel

Received on Thursday, 28 October 2004 20:08:20 UTC