Parallel and Distributed Computing: A Survey of Models, Paradigms and Approaches