September Concurrent Lock Free Programming in 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 any products currently available.
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.
The course is a blend of lectures, coding exercises, and workshops. Solutions will be provided to the exercises that are of sufficient quality for deployment to production systems. 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 and NUMA Interconnects - Coding Patterns for Mechanical Sympathy - Memory Models
What is a Memory Model: - Hardware Memory Models - Java Memory Model - Performance Testing Theory & Profiling
Performance Testing Patterns: - Micro Benchmarking - Little's and Amdahl’s Laws - Profiling Tools and Techniques - Advanced Concurrent Data Structures
Lock-Free Primitives: - Queues - Executors - Dynamic Lists - Locks - IPC Messaging - Applying Mechanical Sympathy
Substituting Expensive Instructions: - Smart Batching to amortise expensive operations - Avoiding contention with the Single Writer Principle - The Wider Context
Combining techniques: - Managing Contended State - Applying backoff strategies - Design for making progress Reactive Designs & CSP
***Tickets are strictly payment in advance and non-refundable