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