Distributed Programming - Shankar (Springer New York, 2013)