Concurrency vs. Parallelism in Encore (...and Types)
Parallelism warrants concurrency, but more often that not, the concepts are at odds with each other. Typical concurrent programming deals with coordinating related events that execute asynchronously. Typical concurrent programs push control closer to the producers and consumers of related events. Parallel programming on the other hand often thrives on centralised control – on the ability to determine that a certain task can be partitioned and work distributed across multiple cores. How to best support parallelism in actor programs is not clear. Do we use internal parallelism encapsulated inside an actor to increase the throughput of a single message, or do we employ parallelism to process multiple messages to the same actor in parallel, in the hope of reducing latency?
For the last few years, the Encore actor language has served as a playground for exploring how to support – efficiently and safely – both concurrency and parallelism in actor languages. In this talk I will report on our experiences, and how we leverage types across all solutions.