Distributed artificial intelligence as a unifying approach to concurrency and parallelism