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.)
This post is an overview of the concurrency features of Java 7. This includes the Fork/Join Framework, the TransferQueue and the ThreadLocalRandom class
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
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…
P. Damron, A. Fedorova, Y. Lev, V. Luchangco, M. Moir, und D. Nussbaum. ASPLOS-XII: Proceedings of the 12th international conference on Architectural support for programming languages and operating systems, Seite 336--346. New York, NY, USA, ACM, (2006)
S. Marr, M. Haupt, und T. D'Hondt. Proceedings of the 3rd Workshop on Virtual Machines and Intermediate Languages, Seite 3:1--3:2. New York, NY, USA, ACM, (Oktober 2009)(extended abstract).
M. Herlihy, und J. Wing. POPL '87: Proceedings of the 14th ACM SIGACT-SIGPLAN symposium on Principles of programming languages, Seite 13--26. New York, NY, USA, ACM, (1987)
S. Dekeyser, und J. Hidders. ADC '04: Proceedings of the fifteenth Australasian database conference, Seite 93--101. Darlinghurst, Australia, Australia, Australian Computer Society, Inc., (2004)
H. Schippers, T. Van Cutsem, S. Marr, M. Haupt, und R. Hirschfeld. Proceedings of the Fourth Workshop on the Implementation, Compilation, Optimization of Object-Oriented Languages, Programs and Systems (ICOOOLPS), Seite 4--9. ACM, (06.07.2009)
M. Miller, E. Tribble, und J. Shapiro. Symposium on Trustworthy Global Computing, Volume 3705 von Lecture Notes in Computer Science, Seite 195--229. Springer, (April 2005)
R. Kaiabachev, und B. Richards. Proc. of Fifteenth IASTED International Conference on Parallel and Distributed Computing and Systems, Seite 648-653. Marina del Ray, CA, USA, (November 2003)
M. Scott, T. LeBlanc, und B. Marsh. PPOPP '90: Proceedings of the second ACM SIGPLAN symposium on Principles & practice of parallel programming, Seite 70--78. New York, NY, USA, ACM, (1990)
J. Bezivin. OOPSLA '87: Conference proceedings on Object-oriented programming systems, languages and applications, Seite 394--405. New York, NY, USA, ACM, (1987)
R. Blumofe, C. Joerg, B. Kuszmaul, C. Leiserson, K. Randall, und Y. Zhou. Proceedings of the Fifth ACM SIGPLAN Symposium on Principles and Practice of Parallel Programming (PPoPP), 30, Seite 207--216. New York, NY, USA, ACM, (Juli 1995)
M. Herlihy. PODC '06: Proceedings of the twenty-fifth annual ACM symposium on Principles of distributed computing, Seite 1--2. New York, NY, USA, ACM, (2006)