Parallel processing can be achieved using a number of different fundamental approaches (while not strictly necessary to the discussion at hand, a review of one categorization of computing architectures encompassing parallel strategies can be found
here, while another one will be discussed
later in this presentation). The goal of all of them, of course, is to more efficiently and effectively obtain results to a particular computational problem, making the best use possible of the resources at hand.
"The resources at hand", however, used to mean "just what's gathered together inside this [select one of: tiny, little, medium-sized, hefty, big, room-sized] box, here" -- all computing had to be accomplished within a very tightly localized domain. That situation began to change significantly in the '70s with the advent of the first slow, narrow-bandwidth, and often-interrupted tele-communications networks connecting academic and research facilities in various locations across the country. Initially efforts were on simply sharing data, but very quickly became focused on sharing computing cycles, on distributing the processing load. That capability now holds a central place in many aspects of our daily lives, from transportation reservation systems, to automatic banking, to decentralized control of phone circuits, and many, many more.
This presentation will provide you with the fundamentals of the central issues concerning distributed processing, progressing from an overview of hardware aspects, through an introduction to important software concerns, and ending with a discussion of significant issues in the design of distributed applications. By the end of this presentation you can expect to have a good understanding of the important ideas, terms, concepts, and issues relevant to the field, and the hardware and software vehicles most often found implementing and supporting it.