Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
An Introduction to the
                  LMAX Disruptor
                           Trisha Gee, Developer at LMAX Exchange
                                          @trisha_gee
                                      mechanitis.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 One
                           One publisher, one event handler




Tuesday, 25 September 12
Our Problem




Tuesday, 25 September 12
Simplest Disruptor




Tuesday, 25 September 12
TODO

                   • Print status of the enemy when the tower
                           sees it
                   • Print status of enemy after the tower
                           shoots it
                   • Shoot all enemies

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/sec
               run 1: BlockingQueue=5,229,851 Disruptor=71,123,755 ops/sec
               run 2: BlockingQueue=4,303,481 Disruptor=65,530,799 ops/sec

               Disruptor - Time Taken: 3,242 millis
               Disruptor - Time Taken: 3,319 millis
               Disruptor - Time Taken: 4,045 millis

               Queue - Time Taken: 30,022 millis
               Queue - Time Taken: 31,823 millis
               Queue - Time Taken: 29,280 millis




Tuesday, 25 September 12
Exercise Two
                           One 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 Three
                             Diamond 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 Four
                               Playtime!!




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

More Related Content

Workshop: Introduction to the Disruptor