In an earlier post I mentioned that one goal of the new introductory curriculum at Carnegie Mellon is to teach parallelism as the general case of computing, rather than an esoteric, specialized subject for advanced students. Many people are incredulous when I tell them this, because it immediately conjures in their mind the myriad complexities…
We've discussed differences between parallel, computational systems and concurrent, event handling systems. Areas of differences include:
Determinism: desirable vs impossible
Sign of parallel safety: same results vs correct results
Parallelism bugs: easy to pinpoint vs impossible to define
Queues: implementation detail vs part of the interface
Preemption: nearly useless vs nearly essential
This post is an overview of the concurrency features of Java 7. This includes the Fork/Join Framework, the TransferQueue and the ThreadLocalRandom class
Dynamic Networks Everything I described so far is common to CSP (Communicating Sequential Processes) and the Actor model. Here’s what makes actors more general: Connections between actors are dynamic. Unlike processes in CSP, actors may establish communication channels dynamically. They may pass messages containing references to actors (or mailboxes). They can then send messages to those actors. Here’s a Scala example: receive { case (name: String, actor: Actor) => actor ! lookup(name) } The original message is a tuple combining a string and an actor object. The receiver sends the result of lookup(name) to the actor it has just learned about. Thus a new communication channel between the receiver and the unknown actor can be established at runtime. (In Kilim the same is possible by passing mailboxes via messages.)
M. Herlihy. PODC '06: Proceedings of the twenty-fifth annual ACM symposium on Principles of distributed computing, page 1--2. New York, NY, USA, ACM, (2006)
R. Blumofe, C. Joerg, B. Kuszmaul, C. Leiserson, K. Randall, and Y. Zhou. Proceedings of the Fifth ACM SIGPLAN Symposium on Principles and Practice of Parallel Programming (PPoPP), 30, page 207--216. New York, NY, USA, ACM, (July 1995)
J. Bezivin. OOPSLA '87: Conference proceedings on Object-oriented programming systems, languages and applications, page 394--405. New York, NY, USA, ACM, (1987)
M. Scott, T. LeBlanc, and B. Marsh. PPOPP '90: Proceedings of the second ACM SIGPLAN symposium on Principles & practice of parallel programming, page 70--78. New York, NY, USA, ACM, (1990)
R. Kaiabachev, and B. Richards. Proc. of Fifteenth IASTED International Conference on Parallel and Distributed Computing and Systems, page 648-653. Marina del Ray, CA, USA, (November 2003)
M. Miller, E. Tribble, and J. Shapiro. Symposium on Trustworthy Global Computing, volume 3705 of Lecture Notes in Computer Science, page 195--229. Springer, (April 2005)
H. Schippers, T. Van Cutsem, S. Marr, M. Haupt, and R. Hirschfeld. Proceedings of the Fourth Workshop on the Implementation, Compilation, Optimization of Object-Oriented Languages, Programs and Systems (ICOOOLPS), page 4--9. ACM, (Jul 6, 2009)
S. Dekeyser, and J. Hidders. ADC '04: Proceedings of the fifteenth Australasian database conference, page 93--101. Darlinghurst, Australia, Australia, Australian Computer Society, Inc., (2004)
M. Herlihy, and J. Wing. POPL '87: Proceedings of the 14th ACM SIGACT-SIGPLAN symposium on Principles of programming languages, page 13--26. New York, NY, USA, ACM, (1987)
S. Marr, M. Haupt, and T. D'Hondt. Proceedings of the 3rd Workshop on Virtual Machines and Intermediate Languages, page 3:1--3:2. New York, NY, USA, ACM, (October 2009)(extended abstract).
P. Damron, A. Fedorova, Y. Lev, V. Luchangco, M. Moir, and D. Nussbaum. ASPLOS-XII: Proceedings of the 12th international conference on Architectural support for programming languages and operating systems, page 336--346. New York, NY, USA, ACM, (2006)