I've read the source code roughly
and I found that Activiti uses the very thread of client's service call rather than creating a new thread to continue the process, therefore, a complete task service call will be halted until the execution runs into another non-automatic activity (a user task for example) or until the whole process ends. This might not be acceptable when there were a lot of automatic and time-consuming tasks (such as web service calls) behind.
Maybe I've come to a wrong conclusion.
Thanks!