Rethinking Multi-Threaded Design Principles, Part 2