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