September 2016: Concurrent Lock-Free Programming with Java
By the end of this course candidates will have acquired an in-depth knowledge of concurrent programming that allows them to develop data structures such as queues, executors, and shared memory IPC transports that significantly out perform the standard approaches.
In addition to learning the basic techniques of building high-performance data structures, a performance testing and profiling methodology will be introduced that is fundamental to working at the extremes of systems performance.
All tickets are full payment in advance
Tickets
Additional Information
The course is a blend of lectures, coding exercises, and workshops. Candidates should bring along a laptop capable of running at least 4 threads concurrently, i.e. dual core with Hyperthreading enabled. Though not a requirement, systems with Linux installed can participate in deeper profiling exercises.
UNDERSTANDING MODERN HARDWARE - Why we have a Memory Hierarchy - CPU Pipelines & Instruction Processing - Memory Ordering Buffers - Cache Sub-Systems - Main Memory - PCI-e & NUMA Interconnects - Coding Patterns for Mechanical Sympathy - Memory Models
WHAT IS A MEMORY MODEL - Hardware Memory Models - Java Memory Model - Performance Testing + Modelling & Profiling
PERFORMANCE TESTING PATTERNS - Micro Benchmarking - Queueing Theory, Little's, Amdahl’s & Universal Scalability Laws - Profiling Tools & Techniques - Advanced Concurrent Data Structures
LOCK-FREE PRIMITIVES - Queues - Executors - Dynamic Lists - Locks - IPC Messaging - Applying Mechanical Sympathy
SUBSTITUTING EXPENSIVE OPERATIONS - Smart Batching to amortise expensive operations - Avoiding contention with the Single Writer Principle - The Wider Context + Putting it into Practice
COMBINING TECHNIQUES - Managing Contended State - Applying backoff strategies - Design for making progress - Reactive Designs & CSP