Multithreaded programming is everywhere nowadays. However, the way we construct multithreaded programs is still largely primitive; similar to using gotos in the era of structured programming. The current methods have usability, composability, correctness and also performance problems.
This talk aims at providing a new toolset for the multithreaded programmer. Instead of writing our multithreaded programs in terms of explicit threads and synchronization primitives, one should be expressing them in terms of tasks and dependencies between tasks. The talk describes a method of modeling the programs and dependencies. It also shows how one can eliminate locks (or any synchronization primitives) from programs. Using this method, one can raise the abstraction of multithreaded programs, bring back composability, improve determinism, and also improve performance.
The talk will be a mix of theory (presented in an intuitive manner), comparisons with other models, practical examples, and, of course, performance considerations.