While multithreading abstractions are consolidating over a couple of basic primitives around the notion of tasks and futures, under the hood implementations are vastly differing.
The abstraction "details" are significant in the current era as developers now have to find parallelism opportunities for 16+ cores on consumer CPUs.
We go over the design space of task-parallel and data-parallel multithreading runtime library and present an unique, scalable approach
based on message passing.