Upload
trisha-gee
View
10.580
Download
1
Embed Size (px)
DESCRIPTION
Trisha Gee of LMAX ran a workshop at Strange Loop 2012 giving a hands on set of exercises demonstrating the syntax of the Disruptor
Citation preview
An Introduction to the LMAX DisruptorTrisha Gee, Developer at LMAX Exchange
@trisha_geemechanitis.blogspot.com
Tuesday, 25 September 12
Laptop Setup... Go!
Tuesday, 25 September 12
The Disruptor?
Tuesday, 25 September 12
The Workshop
• Introduction to the Disruptor
• Simplest Case
• Performance Results
• Going Parallel
• The Real World
• Questions
Tuesday, 25 September 12
What is The Disruptor?
• Very fast message passing
• Data structure and work flow without contention
• Allows you to go truly parallel
Tuesday, 25 September 12
So...?
Tuesday, 25 September 12
The Magic RingBuffer
Tuesday, 25 September 12
The Magic RingBuffer
Tuesday, 25 September 12
The Magic RingBuffer
Tuesday, 25 September 12
The Magic RingBuffer
Tuesday, 25 September 12
The Magic RingBuffer
Tuesday, 25 September 12
The Magic RingBuffer
Tuesday, 25 September 12
The Events are Buckets
Tuesday, 25 September 12
I’ve got a RingBuffer!
• Erm.... how do I poke things into it?
Tuesday, 25 September 12
The Publisher
Tuesday, 25 September 12
Tuesday, 25 September 12
Tuesday, 25 September 12
Tuesday, 25 September 12
Tuesday, 25 September 12
Tuesday, 25 September 12
Tuesday, 25 September 12
...so now I want to read
• The Disruptor provides nice batching behaviour for free
Tuesday, 25 September 12
BatchEventProcessor
Tuesday, 25 September 12
Tuesday, 25 September 12
Tuesday, 25 September 12
Tuesday, 25 September 12
Tuesday, 25 September 12
Tuesday, 25 September 12
Tuesday, 25 September 12
Tuesday, 25 September 12
Tuesday, 25 September 12
Tuesday, 25 September 12
Tuesday, 25 September 12
Tuesday, 25 September 12
Tuesday, 25 September 12
Tuesday, 25 September 12
Tuesday, 25 September 12
The Problem
Tuesday, 25 September 12
Tower Defence?
Tuesday, 25 September 12
Tuesday, 25 September 12
Tuesday, 25 September 12
Tuesday, 25 September 12
Tuesday, 25 September 12
Tuesday, 25 September 12
Exercise OneOne publisher, one event handler
Tuesday, 25 September 12
Our Problem
Tuesday, 25 September 12
Simplest Disruptor
Tuesday, 25 September 12
• Print status of the enemy when the tower sees it
• Print status of enemy after the tower shoots it
• Shoot all enemies
TODO
Tuesday, 25 September 12
Task Breakdown
• Wire up the EventTranslator & EventHandler, using the Disruptor class
• Implement shootAt
• Implement respawn & isDead
• Get unit tests to pass
• (check out mechanitis.examples.disruptor)
Tuesday, 25 September 12
Exercise One Goals
1. Understand the roles of Translators and Event Handlers
2. Understand how to wire up a simple Disruptor configuration
3. Understand how to get events flowing through the Disruptor
Tuesday, 25 September 12
Performance vs a Queue
Mac Air, 1.7GHz Core i5:run 0: BlockingQueue=3,390,060 Disruptor=69,108,500 ops/secrun 1: BlockingQueue=5,229,851 Disruptor=71,123,755 ops/secrun 2: BlockingQueue=4,303,481 Disruptor=65,530,799 ops/sec
Disruptor - Time Taken: 3,242 millisDisruptor - Time Taken: 3,319 millisDisruptor - Time Taken: 4,045 millis
Queue - Time Taken: 30,022 millisQueue - Time Taken: 31,823 millisQueue - Time Taken: 29,280 millis
Tuesday, 25 September 12
Exercise TwoOne publisher, two parallel event handlers
Tuesday, 25 September 12
Let’s log all the enemies
Tuesday, 25 September 12
Parallel Processors
Tuesday, 25 September 12
• Make each enemy unique
• Write the details of each enemy generated into a text file
Tuesday, 25 September 12
Task Breakdown
• Add randomness to enemy (e.g. give them a speed to travel at)
• Wire in the EnemyLogger
• Implement describeTo in enemy
Tuesday, 25 September 12
Exercise Two Goals
1. Understand that EventHandlers can process in parallel
2. Understand how to wire up EventHandlers in parallel
3. Understand the caveats to going parallel - single writer principal
Tuesday, 25 September 12
Exercise ThreeDiamond Dependencies
Tuesday, 25 September 12
Recording the Results
Tuesday, 25 September 12
Sequence Barriers
Tuesday, 25 September 12
Managing Dependencies
Tuesday, 25 September 12
• Don’t use the Disruptor Wizard for configuration
• Record results of the game to a different text file
• Optional: add variability to Turret
Tuesday, 25 September 12
Task Breakdown
• Remove use of Disruptor.java and wire up manually (mechanitis.examples.disruptor)
• Wire in ResultHandler
• Add missing things from Enemy class
Tuesday, 25 September 12
Exercise Three Goals
1. Understand sequence barriers
2. Understand different dependency configurations
3. Understand wiring up without the wizard
Tuesday, 25 September 12
Exercise FourPlaytime!!
Tuesday, 25 September 12
Slow Consumers?
Tuesday, 25 September 12
The Real World
Tuesday, 25 September 12
Tuesday, 25 September 12
Tuesday, 25 September 12
Tuesday, 25 September 12
Ticket Purchasing
Tuesday, 25 September 12
Tuesday, 25 September 12
Tuesday, 25 September 12
Tuesday, 25 September 12
Tuesday, 25 September 12
Tuesday, 25 September 12
Tuesday, 25 September 12
Tuesday, 25 September 12
Other Uses
• Queue replacement
• Single-threading your code
• Filtering
• Coalescing
• Dependency graphs
Tuesday, 25 September 12
Questions
Tuesday, 25 September 12